ios - 从图像中检测文本并获取关键字的矩形
问题描述
我正在尝试获取在UIImage
using中找到的所有文本VisionKit
并获取图像中关键字(如果存在)的位置。到目前为止,我有这个:
var detectedText = ""
var textRecognitionRequest = VNRecognizeTextRequest(completionHandler: nil)
let textRecognitionWorkQueue = DispatchQueue(label: "TextRecognitionQueue", qos: .userInitiated, attributes: [], autoreleaseFrequency: .workItem)
private func recognizeTextInImage(_ image: UIImage?) {
guard let cgImage = image?.cgImage else { return }
textRecognitionWorkQueue.async {
let requestHandler = VNImageRequestHandler(cgImage: cgImage, options: [:])
do {
try requestHandler.perform([self.textRecognitionRequest])
} catch {
// You should handle errors appropriately in your app.
print(error)
}
}
}
并在viewDidLoad
:
override func viewDidLoad() {
super.viewDidLoad()
let imgData = object.scannedImage ?? Data()
recognizeTextInImage(UIImage(data: imgData, scale: 1.0))
textRecognitionRequest.recognitionLevel = .accurate
textRecognitionRequest.usesLanguageCorrection = true
textRecognitionRequest.recognitionLanguages = ["en-US"]
textRecognitionRequest.customWords = ["KEYWORD"]
textRecognitionRequest = VNRecognizeTextRequest { (request, error) in
guard let observations = request.results as? [VNRecognizedTextObservation] else { return }
for observation in observations {
guard let topCandidate = observation.topCandidates(1).first else { return }
self.detectedText += topCandidate.string
self.detectedText += " "
if topCandidate.string == "KEYWORD" {
let boundingBox = observation.boundingBox
guard let imageData = object.scannedImage else { return }
let imgSize = UIImage(data: imageData)!.size
let rect = CGRect(x: boundingBox.minX * imgSize.width,
y: boundingBox.minY * imgSize.height,
width: boundingBox.width * imgSize.width,
height: boundingBox.height * imgSize.height)
print(rect)
}
}
}
}
但是检测boundingBox
确实减慢了在图像中查找所有文本的过程,并且它变得非常不准确,并且永远不会调用矩形的打印。
有没有更好的方法来做到这一点?
解决方案
推荐阅读
- java - ArrayAdapter 错误无法解析构造函数 'ArrayAdapter(匿名 com.google.firebase.database.ValueEventListener
- azure-iot-edge - 如何在 azure iot edge 中升级模块
- python - 从 FTP 服务器上的 gz 文件中检索数据而不在本地写入
- python - 如何从两个键中打印出值?
- c# - 如何使动态创建的按钮单击事件使用c#中数据库表的一行数据
- php - 集合为空,但是 if(!empty($tags)) 的计算结果为 true
- fortran - gfortran 在写语句的续行中添加空格
- c# - Span 和 Memory 作为方法签名中数组的替代品?
- web - Facebook Graph API – 从 Instagram 页面获取网站 – 截屏视频
- javascript - 禁用:'{readOnly}' ExtJs 是什么意思