চিত্র বোঝা
জেমিনি মডেলগুলো একেবারে গোড়া থেকেই মাল্টিমোডাল হিসেবে তৈরি করা হয়েছে, যা বিশেষায়িত এমএল মডেলকে প্রশিক্ষণ না দিয়েই ইমেজ ক্যাপশনিং, ক্লাসিফিকেশন এবং ভিজ্যুয়াল কোয়েশ্চেন অ্যানসারিং-এর মতো বিস্তৃত পরিসরের ইমেজ প্রসেসিং ও কম্পিউটার ভিশন টাস্ক সম্পাদনের সুযোগ করে দেয়।
তাদের সাধারণ মাল্টিমোডাল সক্ষমতার পাশাপাশি, জেমিনি মডেলগুলো অতিরিক্ত প্রশিক্ষণের মাধ্যমে অবজেক্ট ডিটেকশনের মতো নির্দিষ্ট ব্যবহারের ক্ষেত্রে উন্নততর নির্ভুলতা প্রদান করে।
মিথুন রাশিতে ছবি পাঠানো হচ্ছে
আপনি দুটি পদ্ধতি ব্যবহার করে জেমিনিতে ইনপুট হিসেবে ছবি সরবরাহ করতে পারেন:
- ইনলাইন ইমেজ ডেটা পাস করা : ছোট ফাইলের জন্য আদর্শ (প্রম্পট সহ মোট অনুরোধের আকার ২০ মেগাবাইটের কম)।
- ফাইল এপিআই ব্যবহার করে ছবি আপলোড করা : বড় আকারের ফাইলের জন্য অথবা একাধিক অনুরোধে ছবি পুনরায় ব্যবহার করার জন্য এটি সুপারিশ করা হয়।
ইনলাইন ইমেজ ডেটা পাস করা
আপনি generateContent রিকোয়েস্টে ইনলাইন ইমেজ ডেটা পাস করতে পারেন। আপনি ইমেজ ডেটা Base64 এনকোডেড স্ট্রিং হিসেবে অথবা সরাসরি লোকাল ফাইল থেকে রিড করে (ভাষার উপর নির্ভর করে) প্রদান করতে পারেন।
নিম্নলিখিত উদাহরণটি দেখায় কিভাবে একটি স্থানীয় ফাইল থেকে একটি ছবি পড়ে প্রসেসিংয়ের জন্য generateContent API-তে পাঠানো যায়।
পাইথন
from google import genai
from google.genai import types
with open('path/to/small-sample.jpg', 'rb') as f:
image_bytes = f.read()
client = genai.Client()
response = client.models.generate_content(
model='gemini-3-flash-preview',
contents=[
types.Part.from_bytes(
data=image_bytes,
mime_type='image/jpeg',
),
'Caption this image.'
]
)
print(response.text)
জাভাস্ক্রিপ্ট
import { GoogleGenAI } from "@google/genai";
import * as fs from "node:fs";
const ai = new GoogleGenAI({});
const base64ImageFile = fs.readFileSync("path/to/small-sample.jpg", {
encoding: "base64",
});
const contents = [
{
inlineData: {
mimeType: "image/jpeg",
data: base64ImageFile,
},
},
{ text: "Caption this image." },
];
const response = await ai.models.generateContent({
model: "gemini-3-flash-preview",
contents: contents,
});
console.log(response.text);
যান
bytes, _ := os.ReadFile("path/to/small-sample.jpg")
parts := []*genai.Part{
genai.NewPartFromBytes(bytes, "image/jpeg"),
genai.NewPartFromText("Caption this image."),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
ctx,
"gemini-3-flash-preview",
contents,
nil,
)
fmt.Println(result.Text())
বিশ্রাম
IMG_PATH="/path/to/your/image1.jpg"
if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
B64FLAGS="--input"
else
B64FLAGS="-w0"
fi
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[
{
"inline_data": {
"mime_type":"image/jpeg",
"data": "'"$(base64 $B64FLAGS $IMG_PATH)"'"
}
},
{"text": "Caption this image."},
]
}]
}' 2> /dev/null
এছাড়াও আপনি একটি URL থেকে ছবি নিয়ে, সেটিকে বাইটে রূপান্তর করে, এবং নিচের উদাহরণগুলোতে দেখানো অনুযায়ী generateContent এ পাঠাতে পারেন।
পাইথন
from google import genai
from google.genai import types
import requests
image_path = "https://goo.gle/instrument-img"
image_bytes = requests.get(image_path).content
image = types.Part.from_bytes(
data=image_bytes, mime_type="image/jpeg"
)
client = genai.Client()
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents=["What is this image?", image],
)
print(response.text)
জাভাস্ক্রিপ্ট
import { GoogleGenAI } from "@google/genai";
async function main() {
const ai = new GoogleGenAI({});
const imageUrl = "https://goo.gle/instrument-img";
const response = await fetch(imageUrl);
const imageArrayBuffer = await response.arrayBuffer();
const base64ImageData = Buffer.from(imageArrayBuffer).toString('base64');
const result = await ai.models.generateContent({
model: "gemini-3-flash-preview",
contents: [
{
inlineData: {
mimeType: 'image/jpeg',
data: base64ImageData,
},
},
{ text: "Caption this image." }
],
});
console.log(result.text);
}
main();
যান
package main
import (
"context"
"fmt"
"os"
"io"
"net/http"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
// Download the image.
imageResp, _ := http.Get("https://goo.gle/instrument-img")
imageBytes, _ := io.ReadAll(imageResp.Body)
parts := []*genai.Part{
genai.NewPartFromBytes(imageBytes, "image/jpeg"),
genai.NewPartFromText("Caption this image."),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
ctx,
"gemini-3-flash-preview",
contents,
nil,
)
fmt.Println(result.Text())
}
বিশ্রাম
IMG_URL="https://goo.gle/instrument-img"
MIME_TYPE=$(curl -sIL "$IMG_URL" | grep -i '^content-type:' | awk -F ': ' '{print $2}' | sed 's/\r$//' | head -n 1)
if [[ -z "$MIME_TYPE" || ! "$MIME_TYPE" == image/* ]]; then
MIME_TYPE="image/jpeg"
fi
# Check for macOS
if [[ "$(uname)" == "Darwin" ]]; then
IMAGE_B64=$(curl -sL "$IMG_URL" | base64 -b 0)
elif [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
IMAGE_B64=$(curl -sL "$IMG_URL" | base64)
else
IMAGE_B64=$(curl -sL "$IMG_URL" | base64 -w0)
fi
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[
{
"inline_data": {
"mime_type":"'"$MIME_TYPE"'",
"data": "'"$IMAGE_B64"'"
}
},
{"text": "Caption this image."}
]
}]
}' 2> /dev/null
ফাইল এপিআই ব্যবহার করে ছবি আপলোড করা
বড় ফাইলের জন্য অথবা একই ইমেজ ফাইল বারবার ব্যবহার করার জন্য ফাইলস এপিআই (Files API) ব্যবহার করুন। নিচের কোডটি একটি ইমেজ ফাইল আপলোড করে এবং তারপর generateContent কল করার সময় ফাইলটি ব্যবহার করে। আরও তথ্য এবং উদাহরণের জন্য ফাইলস এপিআই গাইড দেখুন।
পাইথন
from google import genai
client = genai.Client()
my_file = client.files.upload(file="path/to/sample.jpg")
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents=[my_file, "Caption this image."],
)
print(response.text)
জাভাস্ক্রিপ্ট
import {
GoogleGenAI,
createUserContent,
createPartFromUri,
} from "@google/genai";
const ai = new GoogleGenAI({});
async function main() {
const myfile = await ai.files.upload({
file: "path/to/sample.jpg",
config: { mimeType: "image/jpeg" },
});
const response = await ai.models.generateContent({
model: "gemini-3-flash-preview",
contents: createUserContent([
createPartFromUri(myfile.uri, myfile.mimeType),
"Caption this image.",
]),
});
console.log(response.text);
}
await main();
যান
package main
import (
"context"
"fmt"
"os"
"google.golang.org/genai"
)
func main() {
ctx := context.Background()
client, err := genai.NewClient(ctx, nil)
if err != nil {
log.Fatal(err)
}
uploadedFile, _ := client.Files.UploadFromPath(ctx, "path/to/sample.jpg", nil)
parts := []*genai.Part{
genai.NewPartFromText("Caption this image."),
genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
ctx,
"gemini-3-flash-preview",
contents,
nil,
)
fmt.Println(result.Text())
}
বিশ্রাম
IMAGE_PATH="path/to/sample.jpg"
MIME_TYPE=$(file -b --mime-type "${IMAGE_PATH}")
NUM_BYTES=$(wc -c < "${IMAGE_PATH}")
DISPLAY_NAME=IMAGE
tmp_header_file=upload-header.tmp
# Initial resumable request defining metadata.
# The upload url is in the response headers dump them to a file.
curl "https://generativelanguage.googleapis.com/upload/v1beta/files" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-D upload-header.tmp \
-H "X-Goog-Upload-Protocol: resumable" \
-H "X-Goog-Upload-Command: start" \
-H "X-Goog-Upload-Header-Content-Length: ${NUM_BYTES}" \
-H "X-Goog-Upload-Header-Content-Type: ${MIME_TYPE}" \
-H "Content-Type: application/json" \
-d "{'file': {'display_name': '${DISPLAY_NAME}'}}" 2> /dev/null
upload_url=$(grep -i "x-goog-upload-url: " "${tmp_header_file}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file}"
# Upload the actual bytes.
curl "${upload_url}" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H "Content-Length: ${NUM_BYTES}" \
-H "X-Goog-Upload-Offset: 0" \
-H "X-Goog-Upload-Command: upload, finalize" \
--data-binary "@${IMAGE_PATH}" 2> /dev/null > file_info.json
file_uri=$(jq -r ".file.uri" file_info.json)
echo file_uri=$file_uri
# Now generate content using that file
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[
{"file_data":{"mime_type": "'"${MIME_TYPE}"'", "file_uri": "'"${file_uri}"'"}},
{"text": "Caption this image."}]
}]
}' 2> /dev/null > response.json
cat response.json
echo
jq ".candidates[].content.parts[].text" response.json
একাধিক ছবি দিয়ে প্রম্পট করা
contents অ্যারেতে একাধিক image Part অবজেক্ট অন্তর্ভুক্ত করে আপনি একটি প্রম্পটেই একাধিক ছবি দিতে পারেন। এগুলি ইনলাইন ডেটা (স্থানীয় ফাইল বা URL) এবং ফাইল API রেফারেন্সের মিশ্রণ হতে পারে।
পাইথন
from google import genai
from google.genai import types
client = genai.Client()
# Upload the first image
image1_path = "path/to/image1.jpg"
uploaded_file = client.files.upload(file=image1_path)
# Prepare the second image as inline data
image2_path = "path/to/image2.png"
with open(image2_path, 'rb') as f:
img2_bytes = f.read()
# Create the prompt with text and multiple images
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents=[
"What is different between these two images?",
uploaded_file, # Use the uploaded file reference
types.Part.from_bytes(
data=img2_bytes,
mime_type='image/png'
)
]
)
print(response.text)
জাভাস্ক্রিপ্ট
import {
GoogleGenAI,
createUserContent,
createPartFromUri,
} from "@google/genai";
import * as fs from "node:fs";
const ai = new GoogleGenAI({});
async function main() {
// Upload the first image
const image1_path = "path/to/image1.jpg";
const uploadedFile = await ai.files.upload({
file: image1_path,
config: { mimeType: "image/jpeg" },
});
// Prepare the second image as inline data
const image2_path = "path/to/image2.png";
const base64Image2File = fs.readFileSync(image2_path, {
encoding: "base64",
});
// Create the prompt with text and multiple images
const response = await ai.models.generateContent({
model: "gemini-3-flash-preview",
contents: createUserContent([
"What is different between these two images?",
createPartFromUri(uploadedFile.uri, uploadedFile.mimeType),
{
inlineData: {
mimeType: "image/png",
data: base64Image2File,
},
},
]),
});
console.log(response.text);
}
await main();
যান
// Upload the first image
image1Path := "path/to/image1.jpg"
uploadedFile, _ := client.Files.UploadFromPath(ctx, image1Path, nil)
// Prepare the second image as inline data
image2Path := "path/to/image2.jpeg"
imgBytes, _ := os.ReadFile(image2Path)
parts := []*genai.Part{
genai.NewPartFromText("What is different between these two images?"),
genai.NewPartFromBytes(imgBytes, "image/jpeg"),
genai.NewPartFromURI(uploadedFile.URI, uploadedFile.MIMEType),
}
contents := []*genai.Content{
genai.NewContentFromParts(parts, genai.RoleUser),
}
result, _ := client.Models.GenerateContent(
ctx,
"gemini-3-flash-preview",
contents,
nil,
)
fmt.Println(result.Text())
বিশ্রাম
# Upload the first image
IMAGE1_PATH="path/to/image1.jpg"
MIME1_TYPE=$(file -b --mime-type "${IMAGE1_PATH}")
NUM1_BYTES=$(wc -c < "${IMAGE1_PATH}")
DISPLAY_NAME1=IMAGE1
tmp_header_file1=upload-header1.tmp
curl "https://generativelanguage.googleapis.com/upload/v1beta/files" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-D upload-header1.tmp \
-H "X-Goog-Upload-Protocol: resumable" \
-H "X-Goog-Upload-Command: start" \
-H "X-Goog-Upload-Header-Content-Length: ${NUM1_BYTES}" \
-H "X-Goog-Upload-Header-Content-Type: ${MIME1_TYPE}" \
-H "Content-Type: application/json" \
-d "{'file': {'display_name': '${DISPLAY_NAME1}'}}" 2> /dev/null
upload_url1=$(grep -i "x-goog-upload-url: " "${tmp_header_file1}" | cut -d" " -f2 | tr -d "\r")
rm "${tmp_header_file1}"
curl "${upload_url1}" \
-H "Content-Length: ${NUM1_BYTES}" \
-H "X-Goog-Upload-Offset: 0" \
-H "X-Goog-Upload-Command: upload, finalize" \
--data-binary "@${IMAGE1_PATH}" 2> /dev/null > file_info1.json
file1_uri=$(jq ".file.uri" file_info1.json)
echo file1_uri=$file1_uri
# Prepare the second image (inline)
IMAGE2_PATH="path/to/image2.png"
MIME2_TYPE=$(file -b --mime-type "${IMAGE2_PATH}")
if [[ "$(base64 --version 2>&1)" = *"FreeBSD"* ]]; then
B64FLAGS="--input"
else
B64FLAGS="-w0"
fi
IMAGE2_BASE64=$(base64 $B64FLAGS $IMAGE2_PATH)
# Now generate content using both images
curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-3-flash-preview:generateContent" \
-H "x-goog-api-key: $GEMINI_API_KEY" \
-H 'Content-Type: application/json' \
-X POST \
-d '{
"contents": [{
"parts":[
{"text": "What is different between these two images?"},
{"file_data":{"mime_type": "'"${MIME1_TYPE}"'", "file_uri": '$file1_uri'}},
{
"inline_data": {
"mime_type":"'"${MIME2_TYPE}"'",
"data": "'"$IMAGE2_BASE64"'"
}
}
]
}]
}' 2> /dev/null > response.json
cat response.json
echo
jq ".candidates[].content.parts[].text" response.json
বস্তু সনাক্তকরণ
একটি ছবিতে বস্তু শনাক্ত করতে এবং সেগুলোর বাউন্ডিং বক্সের স্থানাঙ্ক পেতে মডেলগুলোকে প্রশিক্ষণ দেওয়া হয়। ছবির আকারের সাপেক্ষে, এই স্থানাঙ্কগুলো [0, 1000] পরিসরে পরিবর্তিত হয়। আপনার মূল ছবির আকারের উপর ভিত্তি করে এই স্থানাঙ্কগুলোকে ডিস্কেল করতে হবে।
পাইথন
from google import genai
from google.genai import types
from PIL import Image
import json
client = genai.Client()
prompt = "Detect the all of the prominent items in the image. The box_2d should be [ymin, xmin, ymax, xmax] normalized to 0-1000."
image = Image.open("/path/to/image.png")
config = types.GenerateContentConfig(
response_mime_type="application/json"
)
response = client.models.generate_content(model="gemini-3-flash-preview",
contents=[image, prompt],
config=config
)
width, height = image.size
bounding_boxes = json.loads(response.text)
converted_bounding_boxes = []
for bounding_box in bounding_boxes:
abs_y1 = int(bounding_box["box_2d"][0]/1000 * height)
abs_x1 = int(bounding_box["box_2d"][1]/1000 * width)
abs_y2 = int(bounding_box["box_2d"][2]/1000 * height)
abs_x2 = int(bounding_box["box_2d"][3]/1000 * width)
converted_bounding_boxes.append([abs_x1, abs_y1, abs_x2, abs_y2])
print("Image size: ", width, height)
print("Bounding boxes:", converted_bounding_boxes)
আরও উদাহরণের জন্য, জেমিনি কুকবুকের নিম্নলিখিত নোটবুকগুলি দেখুন:
সমর্থিত ছবির ফরম্যাট
জেমিনি নিম্নলিখিত ইমেজ ফরম্যাট MIME টাইপগুলো সমর্থন করে:
- PNG -
image/png - JPEG -
image/jpeg - WEBP -
image/webp - HEIC -
image/heic - HEIF -
image/heif
অন্যান্য ফাইল ইনপুট পদ্ধতি সম্পর্কে জানতে, ফাইল ইনপুট পদ্ধতি নির্দেশিকাটি দেখুন।
সক্ষমতা
জেমিনি মডেলের সকল সংস্করণই মাল্টিমোডাল এবং এগুলোকে ইমেজ ক্যাপশনিং, ভিজ্যুয়াল প্রশ্নোত্তর, ইমেজ ক্লাসিফিকেশন এবং অবজেক্ট ডিটেকশন-সহ বিভিন্ন ধরনের ইমেজ প্রসেসিং ও কম্পিউটার ভিশন কাজে ব্যবহার করা যায়।
আপনার গুণমান এবং কর্মক্ষমতার প্রয়োজনীয়তার উপর নির্ভর করে জেমিনি বিশেষায়িত এমএল মডেল ব্যবহারের প্রয়োজনীয়তা কমাতে পারে।
সর্বশেষ মডেল সংস্করণগুলি উন্নত বস্তু সনাক্তকরণের মতো সাধারণ সক্ষমতার পাশাপাশি বিশেষায়িত কাজের নির্ভুলতা বাড়ানোর জন্য বিশেষভাবে প্রশিক্ষিত।
সীমাবদ্ধতা এবং মূল প্রযুক্তিগত তথ্য
ফাইলের সীমা
জেমিনি মডেলগুলো প্রতি অনুরোধে সর্বোচ্চ ৩,৬০০টি ইমেজ ফাইল সমর্থন করে।
টোকেন গণনা
- উভয় মাত্রা ৩৮৪ পিক্সেল বা তার কম হলে ২৫৮টি টোকেন প্রয়োজন। এর চেয়ে বড় ছবিগুলোকে ৭৬৮x৭৬৮ পিক্সেলের টাইলে ভাগ করা হয়, যার প্রতিটির জন্য ২৫৮টি টোকেন খরচ হয়।
টাইলসের সংখ্যা গণনা করার একটি মোটামুটি সূত্র নিচে দেওয়া হলো:
- শস্য এককের আকার গণনা করুন যা মোটামুটি: floor(min(width, height) / 1.5)।
- প্রতিটি মাত্রাকে শস্য এককের আকার দিয়ে ভাগ করুন এবং টাইলসের সংখ্যা পেতে সেগুলোকে একসাথে গুণ করুন।
উদাহরণস্বরূপ, 960x540 মাপের একটি ছবির জন্য ক্রপ ইউনিট সাইজ হবে 360। প্রতিটি মাপকে 360 দিয়ে ভাগ করলে টাইলের সংখ্যা হবে 3 * 2 = 6।
মিডিয়া রেজোলিউশন
জেমিনি ৩, media_resolution প্যারামিটারের মাধ্যমে মাল্টিমোডাল ভিশন প্রসেসিংয়ের উপর সূক্ষ্ম নিয়ন্ত্রণ নিয়ে এসেছে। media_resolution প্যারামিটারটি প্রতিটি ইনপুট ইমেজ বা ভিডিও ফ্রেমের জন্য বরাদ্দকৃত টোকেনের সর্বোচ্চ সংখ্যা নির্ধারণ করে। উচ্চতর রেজোলিউশন সূক্ষ্ম লেখা পড়া বা ছোট ছোট বিবরণ শনাক্ত করার ক্ষেত্রে মডেলের সক্ষমতা বাড়ায়, কিন্তু এর ফলে টোকেনের ব্যবহার এবং ল্যাটেন্সি বৃদ্ধি পায়।
প্যারামিটারটি এবং এটি কীভাবে টোকেন গণনাকে প্রভাবিত করতে পারে সে সম্পর্কে আরও বিস্তারিত জানতে মিডিয়া রেজোলিউশন গাইডটি দেখুন।
পরামর্শ ও সর্বোত্তম অনুশীলন
- ছবিগুলো সঠিকভাবে ঘোরানো হয়েছে কিনা তা যাচাই করুন।
- স্পষ্ট ও ঝাপসা নয় এমন ছবি ব্যবহার করুন।
- টেক্সট সহ একটিমাত্র ছবি ব্যবহার করার সময়,
contentsঅ্যারেতে ছবির অংশের পরে টেক্সট প্রম্পটটি রাখুন।
এরপর কী?
এই নির্দেশিকাটি আপনাকে দেখাবে কীভাবে ইমেজ ফাইল আপলোড করতে হয় এবং ইমেজ ইনপুট থেকে টেক্সট আউটপুট তৈরি করতে হয়। আরও জানতে, নিম্নলিখিত রিসোর্সগুলো দেখুন:
- ফাইলস এপিআই : জেমিনির সাথে ব্যবহারের জন্য ফাইল আপলোড এবং পরিচালনা সম্পর্কে আরও জানুন।
- সিস্টেম নির্দেশাবলী : সিস্টেম নির্দেশাবলী আপনাকে আপনার নির্দিষ্ট প্রয়োজন এবং ব্যবহারের ক্ষেত্র অনুযায়ী মডেলের আচরণ নিয়ন্ত্রণ করতে দেয়।
- ফাইল প্রম্পটিং কৌশল : জেমিনি এপিআই টেক্সট, ছবি, অডিও এবং ভিডিও ডেটা দিয়ে প্রম্পটিং সমর্থন করে, যা মাল্টিমোডাল প্রম্পটিং নামেও পরিচিত।
- নিরাপত্তা নির্দেশিকা : কখনও কখনও জেনারেটিভ এআই মডেলগুলি অপ্রত্যাশিত আউটপুট তৈরি করে, যেমন ভুল, পক্ষপাতদুষ্ট বা আপত্তিকর আউটপুট। এই ধরনের আউটপুট থেকে ক্ষতির ঝুঁকি সীমিত করার জন্য পোস্ট-প্রসেসিং এবং মানুষের মূল্যায়ন অপরিহার্য।