gpt4 book ai didi

android - 在视觉 API 中将 TextBlock 从上到下排序

转载 作者:行者123 更新时间:2023-11-29 14:34:59 25 4
gpt4 key购买 nike

当我使用视觉 API 扫描文本时,Overlay 将多个文本框作为未排序的列表返回。因此,当我通过循环阅读文本时,有时我会以错误的顺序获取文本,即页面底部的文本首先出现。

OcrDetectorProcessor.java中receiveDetections的示例代码

@Override
public void receiveDetections(Detector.Detections<TextBlock> detections) {
mGraphicOverlay.clear();
SparseArray<TextBlock> items = detections.getDetectedItems();
for (int i = 0; i < items.size(); ++i) {
TextBlock item = items.valueAt(i);
OcrGraphic graphic = new OcrGraphic(mGraphicOverlay, item);
mGraphicOverlay.add(graphic);
}
}

在此代码中,我想根据 TextBlock 的位置对 mGraphicOverlay 列表进行排序。

如果有任何可用的解决方案/建议,那将对我很有帮助。

最佳答案

您需要按照 OCR 示例代码所示对输出进行排序。我在排序前将文本 block 分成几行。

这是我的代码:

List<Text> textLines = new ArrayList<>();

for (int i = 0; i < origTextBlocks.size(); i++) {
TextBlock textBlock = origTextBlocks.valueAt(i);

List<? extends Text> textComponents = textBlock.getComponents();
for (Text currentText : textComponents) {
textLines.add(currentText);
}
}


Collections.sort(textLines, new Comparator<Text>() {
@Override
public int compare(Text t1, Text t2) {
int diffOfTops = t1.getBoundingBox().top - t2.getBoundingBox().top;
int diffOfLefts = t1.getBoundingBox().left - t2.getBoundingBox().left;

if (diffOfTops != 0) {
return diffOfTops;
}
return diffOfLefts;
}
});

StringBuilder textBuilder = new StringBuilder();
for (Text text : textLines) {
if (text != null && text.getValue() != null) {
textBuilder.append(text.getValue() + "\n");
}
}

字符串 ocrString = textBuilder.toString();

关于android - 在视觉 API 中将 TextBlock 从上到下排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49572410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com