OCR 读标
工件码贴在料箱侧面,先定位文本行再逐行识别,读出每行内容。
- C
- C++
- C#
- Python
- Java
- Rust
#include "darra_model.h"
darra_model *det = NULL, *rec = NULL; char *j = NULL;
darra_model_create("ppocr_det.darmodel", NULL, &det); darra_model_open(det, NULL);
darra_model_create("ppocr_rec.darmodel", NULL, &rec); darra_model_open(rec, NULL);
if (darra_model_infer_file(det, "label.png", &j) == DARRA_OK)
for (int i = 0; i < box_count(j); i++) printf("%s ", read_label(rec, "label.png", box_at(j, i)));
darra_model_close(det); darra_model_close(rec);
Darra::AI::Model det("ppocr_det.darmodel"), rec("ppocr_rec.darmodel");
det.Open(); rec.Open();
for (const auto& v : det.infer_file("label.png").content.items) {
if (auto* d = std::get_if<Darra::AI::OcrItem>(&v); d && d->has_box && d->score >= 0.6)
std::printf("%s ", read_label(rec, "label.png", d->box).c_str());
}
using var det = new Darra.AI.Runtime.Model("ppocr_det.darmodel"); using var rec = new Darra.AI.Runtime.Model("ppocr_rec.darmodel");
det.Open(); rec.Open();
foreach (var b in det.InferFile("label.png").Content.Items)
if (b.Score >= 0.6f && b.Box is not null) Console.Write(rec.InferImage(Crop("label.png", b.Box!.Value), Darra.AI.Runtime.ImageDesc.Auto()).Content.Items[0].Text + " ");
from darra_ai import Model
with Model("ppocr_det.darmodel") as det, Model("ppocr_rec.darmodel") as rec:
det.open(); rec.open()
for b in det.infer_file("label.png").content["results"]:
if (b.get("score") or 0) >= 0.6 and b.get("box"):
print(rec.infer_image(crop("label.png", b["box"])).content["results"][0].get("text", ""), end=" ")
import xyz.darra.ai.*;
Model det = new Model("ppocr_det.darmodel"), rec = new Model("ppocr_rec.darmodel");
det.open(); rec.open();
for (InferenceResult.InferenceItem b : det.inferFile("label.png").getContent().items())
if (b.score() != null && b.score() >= 0.6f && b.box() != null) {
var r = rec.inferImage(crop("label.png", b.box()), ImageDesc.auto());
if (r.isSuccess()) System.out.print(r.getContent().items().get(0).text() + " ");
}
use darra_ai::Model;
fn main() -> Result<(), darra_ai::AiError> {
let mut det = Model::new("ppocr_det.darmodel")?; let mut rec = Model::new("ppocr_rec.darmodel")?;
det.open(None)?; rec.open(None)?;
for b in det.infer_file("label.png", None)?.results.iter().filter(|b| b.score.unwrap_or(0.0) >= 0.6 && b.r#box.is_some()) {
println!("{}", read_label(&mut rec, "label.png", b.r#box.unwrap())?);
}
det.close(); rec.close();
Ok(())
}
det 条目的 box 定文本行位置,rec 条目的 text 是该行内容;两段按顺序配对。