import UIKit
import Vision
import VisionKit
class TextRecoViewController: UIViewController {
lazy var resultLabel: UILabel = {
var resultLabel = UILabel()
resultLabel.frame = CGRect(x: 10, y: 500, width: 200, height: 500)
resultLabel.text = "结果"
resultLabel.numberOfLines = 0
return resultLabel
}()
lazy var imageView: UIImageView = {
var imageView = UIImageView(image: UIImage(named: "AAAAA"))
imageView.frame = CGRect(x: 10, y: 0, width: 350, height: 500)
imageView.isUserInteractionEnabled = true
imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handleTapGes(tap:))))
return imageView
}()
lazy var scrollView : UIScrollView = {
let scrollView = UIScrollView(frame: self.view.bounds)
scrollView.contentSize = CGSize(width: view.frame.width, height: 1200)
return scrollView
}()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
title = "文本识别"
view.backgroundColor = .white
view.addSubview(scrollView)
scrollView.addSubview(imageView)
scrollView.addSubview(resultLabel)
findText()
}
@objc func handleTapGes(tap: UITapGestureRecognizer) {
let pic = UIImagePickerController()
pic.delegate = self
present(pic, animated: true) {}
}
func findText() {
DispatchQueue.global().async {
var textLayers: [CAShapeLayer] = []
let textDetectionRequest = VNRecognizeTextRequest { request, _ in
guard let observations = request.results as? [VNRecognizedTextObservation] else {
print("Error")
return
}
DispatchQueue.main.async {
// 把识别的文字全部连成一个string
let maximumCandidates = 1
var resultingText = ""
for observation in observations {
let candidates = observation.topCandidates(maximumCandidates)
for candidate in candidates {
resultingText += candidate.string + "\n"
print(candidate.string)
}
}
self.resultLabel.text = resultingText
textLayers = self.addShapeToText(forObservations: observations, withImageView: self.imageView)
for layer in textLayers {
self.imageView.layer.addSublayer(layer)
}
}
}
textDetectionRequest.recognitionLanguages = ["zh-cn"]
textDetectionRequest.recognitionLevel = .accurate
textDetectionRequest.revision = VNRecognizeTextRequestRevision2
DispatchQueue.main.async {
self.imageView.layer.sublayers?.forEach { layer in
layer.removeFromSuperlayer()
}
if let image = self.imageView.image,
let cgImage = image.cgImage
{
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
guard let _ = try? handler.perform([textDetectionRequest]) else {
return print("Could not perform text Detection Request!")
}
}
}
}
}
func addShapeToText(forObservations observations: [VNRecognizedTextObservation],
withImageView textImageView: UIImageView) -> [CAShapeLayer]
{
// map 筛选里面的结构
let layers: [CAShapeLayer] = observations.map { observation in
let w = observation.boundingBox.size.width * textImageView.bounds.width
let h = observation.boundingBox.size.height * textImageView.bounds.height
let x = observation.boundingBox.origin.x * textImageView.bounds.width
let y = abs((observation.boundingBox.origin.y * (textImageView.bounds.height)) - textImageView.bounds.height) - h
let layer = CAShapeLayer()
layer.frame = CGRect(x: x, y: y, width: w, height: h)
layer.borderColor = UIColor.green.cgColor
layer.borderWidth = 2
layer.cornerRadius = 3
return layer
}
return layers
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
}
extension TextRecoViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
picker.dismiss(animated: true) {}
guard let pic = info[.originalImage] else {
print("没图片")
return
}
imageView.image = pic as? UIImage
findText()
}
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
picker.dismiss(animated: true) {}
}
}

Screen Shot 2021-09-03 at 15.24.46.png
网友评论