استخراج متن با OCR
Discuse متن را از تصاویر و اسناد بیرون میکشد تا بتوانید محتوایی را که در حالت عادی برای فیلتر متنی نامرئی است بخوانید — و مدیریت کنید. تا ۵ URL تصویر یا سند را به POST /api/v2/ocr بفرستید و متن شناساییشده را دریافت کنید؛ بهصورت پیشفرض، همان متن از بررسیهای محتوایی پروژهتان هم عبور داده میشود.
چرا OCR برای مدیریت محتوا؟
بخش زیادی از سوءاستفادهها داخل تصاویر پنهان میشوند: توهینی که در یک میم جاگذاری شده، لینک فیشینگ در اسکرینشات، یا شماره تلفن کلاهبرداری روی یک تراکت. بررسی متن ساده هیچکدام از اینها را نمیبیند. OCR ابتدا کلمات را استخراج میکند، بنابراین همان بررسیهای احساسات، هرزنامه، کلمات نامناسب و زبان که همین حالا روی متن اجرا میکنید، روی محتوای تصویر و سند هم اعمال میشوند.
چگونه متن را استخراج کنم؟
یک یا چند URL فایل ارسال کنید. مقدار پیشفرض moderate برابر true است، بنابراین متن استخراجشده نیز بررسی میشود و یک شیء results برمیگردد؛ اگر فقط متن خام را میخواهید، آن را روی false بگذارید.
curl -X POST https://api.discuse.com/api/v2/ocr \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"file_urls": ["https://example.com/user-meme.jpg"],
"moderate": true
}'
هر درخواست میتواند تا ۵ URL تصویر یا سند را بپذیرد.
پاسخ
{
"text": "BUY FOLLOWERS NOW — dm @spammer for 50% off",
"has_text": true,
"num_files": 1,
"has_violations": true,
"results": {
"hits": true,
"spamfinder": {
"label": "spam",
"confidence": 0.94,
"is_spam": true,
"hit": true
}
},
"usage": {
"api_requests_used": 412,
"api_requests_limit": 10000,
"api_requests_remaining": 9588
}
}
وقتی moderate برابر false باشد (یا هیچ متنی پیدا نشود)، results حذف میشود و has_violations برابر false است — فقط text استخراجشده را دریافت میکنید.
فیلدهای درخواست
| فیلد | نوع | نکات |
|---|---|---|
api_key |
string | در بدنه اختیاری است؛ میتوانید بهجای آن X-API-Key را بفرستید |
file_urls |
string[] | URLهای تصویر یا سند برای خواندن. حداقل یکی لازم است، حداکثر ۵ مورد |
moderate |
boolean | متن استخراجشده را از بررسیهای متنی شما عبور میدهد. مقدار پیشفرض true است |
فیلدهای پاسخ
| فیلد | نوع | توضیح |
|---|---|---|
text |
string | متن شناساییشده، بهصورت تجمیعشده از همه فایلها |
has_text |
boolean | اگر هر متن غیرخالی شناسایی شده باشد، True است |
num_files |
number | تعداد فایلهایی که با موفقیت خوانده شدهاند |
has_violations |
boolean | اگر متن مدیریتشده یکی از بررسیها را فعال کرده باشد، True است |
results |
object | نتایج بررسی متن (به تحلیل متن مراجعه کنید)، فقط زمانی حاضر است که مدیریت اجرا شده و متن پیدا شده باشد |
usage |
object | api_requests_used, api_requests_limit, api_requests_remaining |
شیء results همان ساختار POST /api/v2/check را دارد — spamfinder، sentiment، language، badwords و پرچم سطح بالای hits. برای جزئیات فیلدها، تحلیل متن را ببینید.
محدودیتهای استفاده
OCR قابلیتی مخصوص پلنهای پولی است؛ هر فایلی که استخراج میکنید یک بار از سهمیه OCR شما کم میکند.
| پلن | استخراجهای ماهانه OCR | نرخ مصرف مازاد |
|---|---|---|
| Basic | در دسترس نیست | - |
| Gold | 1,000 | $0.0015/extraction |
| Platinum | 2,000 | $0.001275/extraction (15% discount) |
| Ultimate | 4,000 | $0.001125/extraction (25% discount) |
اگر پروژه اشتراک فعال نداشته باشد، درخواستهای OCR رد میشوند.
بهترین روشها
مدیریت در یک فراخوانی
وقتی هدفتان شناسایی نقض سیاستها در تصاویر است، moderate را روشن بگذارید (حالت پیشفرض). یک فراخوانی OCR هم متن را استخراج میکند و هم آن را بررسی میکند، بهجای اینکه بعد از فراخوانی OCR یک فراخوانی جداگانه /check انجام دهید.
async function moderateImage(fileUrl) {
const res = await ocr([fileUrl], true);
if (res.has_violations) {
await flagForReview(fileUrl, res.results);
}
return res.text;
}
پیش از اقدام، has_text را بررسی کنید
تصویری که متن خواندنی ندارد، has_text: false و یک text خالی برمیگرداند. بر اساس آن مسیر جداگانهای در نظر بگیرید تا «چیزی برای خواندن وجود ندارد» را با «پاک و تأییدشده» اشتباه نگیرید.
فایلهای مرتبط را دستهای ارسال کنید
اگر یک ارسال شامل چند تصویر است، آنها را با هم (تا ۵ مورد) در یک درخواست بفرستید، نه اینکه برای هر فایل یک فراخوانی جداگانه انجام دهید — رفتوبرگشتهای کمتر، و یک پاسخ که در سهمیه محاسبه میشود.
نمونههای یکپارچهسازی
Node.js
async function ocr(fileUrls, moderate = true) {
const response = await fetch('https://api.discuse.com/api/v2/ocr', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': process.env.DISCUSE_API_KEY
},
body: JSON.stringify({ file_urls: fileUrls, moderate })
});
return response.json();
}
Python
import os
import requests
def ocr(file_urls, moderate=True):
response = requests.post(
'https://api.discuse.com/api/v2/ocr',
headers={
'Content-Type': 'application/json',
'X-API-Key': os.environ['DISCUSE_API_KEY']
},
json={'file_urls': file_urls, 'moderate': moderate}
)
return response.json()
آمادهاید متن را از تصاویر بخوانید؟ شروع کار با Discuse.