ios - TesseractOCR BAD_ACCESS
问题描述
我正在从 ARKit 捕获帧并从中CVPixelBuffer
获取
func session(_ session: ARSession, didUpdate frame: ARFrame) {
if self.detectionFrame != nil {
return
}
self.detectionFrame = frame
// Retain the image buffer for Vision processing.
let pixelBuffer = frame.capturedImage
DispatchQueue.global().async {
self.recognizeText(from: pixelBuffer)
}
}
在recognizeText
我继续初始化 Tesseract 并在将图像转换为UIImage
.
func recognizeText(from image:CVPixelBuffer){
// 1
if let tesseract = MGTesseract(language: "jpn+jpn_vert") {
// 2
tesseract.engineMode = .tesseractCubeCombined
// 3
tesseract.pageSegmentationMode = .auto
// 4
let ciImage = CIImage(cvPixelBuffer: image)
tesseract.image = UIImage(ciImage: ciImage)
// 5
tesseract.recognize()
// 6
let text = tesseract.recognizedText
print(text ?? "")
}
}
这个结果总是在
Thread 15: EXC_BAD_ACCESS (code=1, address=0x0)
在
- (Pix *)pixForImage:(UIImage *)image
{
int width = image.size.width;
int height = image.size.height;
CGImage *cgImage = image.CGImage;
CFDataRef imageData = CGDataProviderCopyData(CGImageGetDataProvider(cgImage));
const UInt8 *pixels = CFDataGetBytePtr(imageData); <<< EXC_BAD_ACCESS
size_t bitsPerPixel = CGImageGetBitsPerPixel(cgImage);
size_t bytesPerPixel = bitsPerPixel / 8;
size_t bytesPerRow = CGImageGetBytesPerRow(cgImage);
我究竟做错了什么?
解决方案
找到缺失的部分,要将缓冲区转换为 UIImage 您需要提供 CIContext 和缓冲区大小
let ciImage = CIImage(cvPixelBuffer: pixBuffer)
let ciContext = CIContext(options: nil)
if let videoImage = ciContext.createCGImage(ciImage, from: CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(pixBuffer), height: CVPixelBufferGetHeight(pixBuffer))) {
self.prcessedImage = UIImage(cgImage: videoImage )
tesseract.image = self.prcessedImage
// 5
tesseract.recognize()
// 6
let text = tesseract.recognizedText
print(text ?? "")
}
推荐阅读
- c++ - 构建在 VS 2013 中找不到 Platform Toolset = 'v141'
- sql - 在遗留的基于 java sql 的项目中集成 apache ignite 加入问题
- python - Python如何从另一个方法内部调用一个方法
- angular - 如何在 HighChart 中为 ColumnRange 图表的 xAixs 添加时间?
- css - css - 浏览器特定占位符颜色的元素颜色
- sql - 如何连接在第三个表中具有公共字段的两个表?
- javascript - 链接接缝是什么意思?
- html - 垂直对齐中间,用于响应式顶部导航,没有固定高度
- python - 确保用户输入是整数并且在特定范围内的问题
- java - 无法在 Spring Boot 中将 Flyway 迁移与 postgresSQL 连接起来