首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >TesseractOCR BAD_ACCESS

TesseractOCR BAD_ACCESS
EN

Stack Overflow用户
提问于 2019-05-22 05:50:16
回答 1查看 57关注 0票数 0

我正在从ARKit捕获帧并从中获取CVPixelBuffer

代码语言:javascript
复制
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后传递图像。

代码语言:javascript
复制
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 ?? "")
    }
}

这个结果总是在

代码语言:javascript
复制
Thread 15: EXC_BAD_ACCESS (code=1, address=0x0)

在…

代码语言:javascript
复制
- (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);

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-05-22 10:38:09

找到缺失的部分,要将缓冲区转换为UIImage,需要提供CIContext和缓冲区大小

代码语言:javascript
复制
        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 ?? "")
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56246799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档