OCR 文本提取
Discuse 可以从图片和文档中提取文本,让你能够读取并审核那些原本会被文本过滤器忽略的内容。向 POST /api/v2/ocr 最多发送 5 个图片或文档 URL,你将收到识别出的文本;默认情况下,这些文本还会经过你项目的内容检查。
为什么审核需要 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
}'
单个请求最多可接受 5 个图片或文档 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。至少需要一个,最多 5 个 |
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/次提取 |
| Platinum | 2,000 | $0.001275/次提取(15% 折扣) |
| Ultimate | 4,000 | $0.001125/次提取(25% 折扣) |
如果项目没有有效订阅,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。请根据它进行分支处理,避免把“没有内容可读”误判为“干净且已确认”。
批量提交相关文件
如果一次提交包含多张图片,请将它们一起发送(最多 5 个)到同一个请求中,而不是每个文件调用一次 —— 这样可以减少往返请求,并获得一次计入配额的响应。
集成示例
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。