实时摄像机swift中的文本检测
我用swift在现场摄像机中检测到文本,但帧并没有被正确的单词识别出来。 当我尝试检测图像中的文本时,该应用程序运行良好,并且在全世界范围内精确绘制帧 对于live camera,我所做的是创建一个捕获视频会话并实现AVCaptureVideoDataOutputSampleBufferDelegate,然后在did OUTPUT中拍摄缓冲图像并将其转换为UIImage并检测其中的文本。但在这种情况下,同样的策略无法正常工作 另外,didOutput每次启动视频会话后都会调用,我只想在用户移动相机或查找文本时调用函数实时摄像机swift中的文本检测,swift,text-recognition,avcapturevideodataoutput,Swift,Text Recognition,Avcapturevideodataoutput,我用swift在现场摄像机中检测到文本,但帧并没有被正确的单词识别出来。 当我尝试检测图像中的文本时,该应用程序运行良好,并且在全世界范围内精确绘制帧 对于live camera,我所做的是创建一个捕获视频会话并实现AVCaptureVideoDataOutputSampleBufferDelegate,然后在did OUTPUT中拍摄缓冲图像并将其转换为UIImage并检测其中的文本。但在这种情况下,同样的策略无法正常工作 另外,didOutput每次启动视频会话后都会调用,我只想在用户移
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
print("didOutput")
// do stuff here
guard let hasImage = CMSampleBufferGetImageBuffer(sampleBuffer) else {
print("no image")
return
}
let imageBuffer = hasImage
let ciimage : CIImage = CIImage(cvPixelBuffer: imageBuffer)
liveCamImage = self.convert(cmage: ciimage)
DispatchQueue.main.async {
self.drawRectOnText(imagefromCam:self.liveCamImage)
}
}
有什么解决办法吗。
//对流函数
func convert(cmage:CIImage) -> UIImage
{
let context:CIContext = CIContext.init(options: nil)
let cgImage:CGImage = context.createCGImage(cmage, from: cmage.extent)!
let image:UIImage = UIImage.init(cgImage: cgImage)
return image
}
在转换方法中使用以下代码:
func convert(samImageBuff:CIImage) -> UIImage{
let imageBuffer = CMSampleBufferGetImageBuffer(samImageBuff)
var ciImage: CIImage? = nil
if let imageBuffer = imageBuffer as? CVPixelBuffer {
ciImage = CIImage(cvPixelBuffer: imageBuffer)
}
let temporaryContext = CIContext(options: nil)
var videoImage: CGImage? = nil
if let ciImage = ciImage {
videoImage = temporaryContext.createCGImage(ciImage, from: CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(imageBuffer), height: CVPixelBufferGetHeight(imageBuffer)))
}
var image: UIImage? = nil
if let videoImage = videoImage {
image = UIImage(cgImage: videoImage)
}
CGImageRelease(videoImage)
return image
}
如果有帮助,请选中此选项:显示您的方法convert()