Ios 如何使用Swift中的UITextField从图像中提取特定文本?
我正在使用Vision框架,我希望能够使用UITextField在图片中查找特定单词。例如,假设我在文本字段中输入单词black,我希望它在我的图片中检测到它。我该怎么做?我使用的是视觉框架,我知道了如何检测文本,但仍然停留在可以检测文本字段中用户输入的单词的部分Ios 如何使用Swift中的UITextField从图像中提取特定文本?,ios,swift,ocr,apple-vision,Ios,Swift,Ocr,Apple Vision,我正在使用Vision框架,我希望能够使用UITextField在图片中查找特定单词。例如,假设我在文本字段中输入单词black,我希望它在我的图片中检测到它。我该怎么做?我使用的是视觉框架,我知道了如何检测文本,但仍然停留在可以检测文本字段中用户输入的单词的部分 func startTextDetection() { let textRequest = VNDetectTextRectanglesRequest(completionHandler: self.d
func startTextDetection() {
let textRequest = VNDetectTextRectanglesRequest(completionHandler: self.detectTextHandler)
let request = VNRecognizeTextRequest(completionHandler: self.detectTextHandler)
request.recognitionLevel = .fast
textRequest.reportCharacterBoxes = true
self.requests = [textRequest]
}
func detectTextHandler(request: VNRequest, error: Error?) {
guard let observations = request.results else {
print("no result")
return
}
let result = observations.map({$0 as? VNTextObservation})
DispatchQueue.main.async() {
self.previewView.layer.sublayers?.removeSubrange(1...)
for region in result {
guard let rg = region else {
continue
}
self.highlightWord(box: rg)
if let boxes = region?.characterBoxes {
for characterBox in boxes {
self.highlightLetters(box: characterBox)
}
}
}
}
}
//when user presses search will search for text in pic.
func textFieldShouldReturn(_ searchTextField: UITextField) -> Bool {
searchTextField.resignFirstResponder()
startTextDetection()
return true
}
您应该在Vision framework上观看WWDC。基本上,从iOS 13开始
VnRecognitizeTextRequest返回文本以及图像中文本的边界框。
代码可以是这样的:
func startTextDetection() {
let request = VNRecognizeTextRequest(completionHandler: self.detectTextHandler)
request.recognitionLevel = .fast
self.requests = [request]
}
private func detectTextHandler(request: VNRequest, error: Error?) {
guard let observations = request.results as? [VNRecognizedTextObservation] else {
fatalError("Received invalid observations")
}
for lineObservation in observations {
guard let textLine = lineObservation.topCandidates(1).first else {
continue
}
let words = textLine.string.split{ $0.isWhitespace }.map{ String($0)}
for word in words {
if let wordRange = textLine.string.range(of: word) {
if let rect = try? textLine.boundingBox(for: wordRange)?.boundingBox {
// here you can check if word == textField.text
// rect is in image coordinate space, normalized with origin in the bottom left corner
}
}
}
}
}
您应该在Vision framework上观看WWDC。基本上,从iOS 13开始
VnRecognitizeTextRequest返回文本以及图像中文本的边界框。
代码可以是这样的:
func startTextDetection() {
let request = VNRecognizeTextRequest(completionHandler: self.detectTextHandler)
request.recognitionLevel = .fast
self.requests = [request]
}
private func detectTextHandler(request: VNRequest, error: Error?) {
guard let observations = request.results as? [VNRecognizedTextObservation] else {
fatalError("Received invalid observations")
}
for lineObservation in observations {
guard let textLine = lineObservation.topCandidates(1).first else {
continue
}
let words = textLine.string.split{ $0.isWhitespace }.map{ String($0)}
for word in words {
if let wordRange = textLine.string.range(of: word) {
if let rect = try? textLine.boundingBox(for: wordRange)?.boundingBox {
// here you can check if word == textField.text
// rect is in image coordinate space, normalized with origin in the bottom left corner
}
}
}
}
}
签出,有几个答案可能对您有所帮助。签出,有几个答案可能对您有所帮助。嘿,谢谢您的帮助,但是当我在UITextField中搜索单词时,如何在单词上方显示边界框?我知道该单词被检测到,因为我使用了
If语句
,并使用print(word)
进行了检查。我只想突出显示搜索到的单词。谢谢我发布的代码也有表示文本位置的CGRect
(rect
变量)。但是,CGRect
的坐标标准化为处理图像的尺寸,原点在左下角。为了将其从图像空间转换到UIImageView
坐标空间,您应该检查vnimagerctfornormalizedrect
和。转换了CGRect
后,使用该框架创建一个视图,给它一个边框宽度和颜色,并将其作为子视图添加到UIImageView
中。嘿,谢谢您的帮助,但是当我在UITextField中搜索它时,如何在单词上方显示边界框?我知道该单词被检测到,因为我使用了If语句
,并使用print(word)
进行了检查。我只想突出显示搜索到的单词。谢谢我发布的代码也有表示文本位置的CGRect
(rect
变量)。但是,CGRect
的坐标标准化为处理图像的尺寸,原点在左下角。为了将其从图像空间转换到UIImageView
坐标空间,您应该检查vnimagerctfornormalizedrect
和。转换了CGRect
后,使用该框架创建一个视图,为其指定边框宽度和颜色,并将其作为子视图添加到UIImageView
。