24

Tesseract OCRiOS アプリケーションでライブラリを使用しようとしています。github から tesseract-ios ライブラリをダウンロードしましたが、単純なテキスト画像を認識しようとすると、代わりにゴミが表示されました。ここに私が認識しようとしたものの画像があります:

ここに画像の説明を入力

読めないテキストが表示されました:

T0I1101T0W KIR1 H1I1101T0W KIR1 H1I1101T0W CIBEPS H1 ES PBHY P306 EHH11 133I R1 11335 11i1H1

なぜTesseractは単純な画像でも認識できないのですか? Tesseract をインスタンス化するために使用したコードは次のとおりです。

Tesseract* tesseractObject = [[Tesseract alloc] initWithDataPath:@"tessdata" language:@"eng"];
[tesseractObject setVariableValue:@"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" forKey:@"tessedit_char_whitelist"];
[tesseractObject setImage:image];
[tesseractObject recognize];
NSLog(@"RECOGNISED= %@" , [tesseractObject recognizedText]);

これが私のプロジェクト構造です:

ここに画像の説明を入力

英語のtestdataフォルダーを参照して追加しました。それで、私は何を間違っていますか?どうすればこれを修正できますか?

4

5 に答える 5

21

文字認識をこのリストのみに制限する値「0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ」でオプション tessedit_char_whitelist を使用しています。ただし、処理する画像には小文字が含まれています。このオプションを使用する場合は、小文字の文字も含める必要があります。

[tesseractObject setVariableValue:@"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" forKey:@"tessedit_char_whitelist"];
于 2013-11-11T08:50:03.877 に答える
19

Googleコードから最新のtessdataファイルがあることを確認してください

http://code.google.com/p/tesseract-ocr/downloads/list

これにより、まだダウンロードしていない場合は、ダウンロードしてアプリに含める必要がある tessdata ファイルのリストが表示されます。あなたの場合、英語のファイルを探しているので、tesseract-ocr-3.02.eng.tar.gz が必要になります。

次の記事では、インストールする必要がある場所を示します。最初の Tesseract プロジェクトを構築したときにこのチュートリアルを読み、非常に役立つことがわかりました。

http://lois.di-qual.net/blog/install-and-use-tesseract-on-ios-with-tesseract-ios/

于 2013-06-18T13:25:53.560 に答える
12

Adam が言ったように、良い結果が必要な場合は、画像処理を行い、いくつかの設定を構成する必要があります (特定の文字をホワイトリストに登録するなど)。

この質問に出くわした他の人のために、ホワイトリストと画像処理を行うサンプルプロジェクトをここにまとめました: https://github.com/mstrchrstphr/OCR-iOS-Example

于 2013-06-22T06:00:47.920 に答える
0

@ Adam Richardsonが説明したものは何でも、これを追加して正しいです。1)画像のサイズを大きくするためのscaleimageメソッド(寸法の増加)

func scaleImage(image: UIImage, maxDimension: CGFloat) -> UIImage {

    var scaledSize = CGSize(width: maxDimension, height: maxDimension)
    var scaleFactor: CGFloat

    if image.size.width > image.size.height {
        scaleFactor = image.size.height / image.size.width
        scaledSize.width = maxDimension
        scaledSize.height = scaledSize.width * scaleFactor
    } else {
        scaleFactor = image.size.width / image.size.height
        scaledSize.height = maxDimension
        scaledSize.width = scaledSize.height * scaleFactor
    }

    UIGraphicsBeginImageContext(scaledSize)
    image.draw(in: CGRect(x: 0, y: 0, width: scaledSize.width, height: scaledSize.height))
    let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return scaledImage!
}

2) この eng.traineddata 言語ファイルをファイルマネージャーに保存します

 func storeLanguageFile() throws{
    var fileManager: FileManager = FileManager.default
    let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
    let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask
    let docDirectory = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)[0] as NSString
    let path: String = docDirectory.appendingPathComponent("/tessdata/eng.traineddata")
    if fileManager.fileExists(atPath: path){
        var data: NSData = NSData.dataWithContentsOfMappedFile((Bundle.main.resourcePath?.appending("/tessdata/eng.traineddata"))!)! as! NSData
        var error: NSError
        try FileManager.default.createDirectory(atPath: docDirectory.appendingPathComponent("/tessdata"), withIntermediateDirectories: true, attributes: nil)
        data.write(toFile: path, atomically: true)
    }
}

3) その後、https://github.com/BradLarson/GPUImageを使用して画像の明瞭度を高めることができます

あなたはこれを使うことができます

func preprocessedImage(for tesseract: G8Tesseract!, sourceImage: UIImage!) -> UIImage! {
    var stillImageFilter: GPUImageAdaptiveThresholdFilter = GPUImageAdaptiveThresholdFilter()
    stillImageFilter.blurRadiusInPixels = 4.0
    var filterImage: UIImage = stillImageFilter.image(byFilteringImage: sourceImage)
    return filterImage
}

これらの 3 つのステップは、tesseract の精度を最大 60 ~ 70% 向上させるのに役立ちます

于 2016-12-21T06:49:27.940 に答える
0

ここに画像の説明を入力

そして私の出力は

ここに画像の説明を入力

解決 :

 tesseract.language = @"eng+fra";

tesseract.pageSegmentationMode = G8PageSegmentationModeAuto;
tesseract.engineMode  = G8OCREngineModeTesseractCubeCombined;
tesseract.image = [image.image g8_blackAndWhite];

tesseract.maximumRecognitionTime = 60.0;
[tesseract recognize];

NSLog(@"%@", tesseract.recognizedText);

reco_area.text = [tesseract recognizedText];

tessdataについては、 ここをクリックしてください

于 2016-11-08T08:29:14.113 に答える