私は、Tess4J でできることをすべて試してみました。これまでに行ったテストから、現在行っているようにテキストを画像ファイル内に構造化された横方向に入力すると、テキストを取得できます。ただし、テキストをまったく回転し始めると、Tess4J でテキストを取得できません。Tess4J は、垂直、45 度など、さまざまな角度のテキストを処理できる必要がありますか?
3 に答える
Tess4j によるデスキュー
ソース コードTess4j (Tesseract の Java JNA ラッパー) を見てください。
私は最近この回答を投稿しました(画像を傾き補正およびトリミングするためのJava画像ライブラリ)
答え:
ImageDeskew.getSkewAngle()とImageHelper.rotate(BufferedImage image, double angle)を組み合わせることができます。
tess4j プロジェクトTesseract1Test.javaのテスト フォルダーで使用する方法の例があります。
public void testDoOCR_SkewedImage() throws Exception {
logger.info("doOCR on a skewed PNG image");
File imageFile = new File(this.testResourcesDataPath, "eurotext_deskew.png");
BufferedImage bi = ImageIO.read(imageFile);
ImageDeskew id = new ImageDeskew(bi);
double imageSkewAngle = id.getSkewAngle(); // determine skew angle
if ((imageSkewAngle > MINIMUM_DESKEW_THRESHOLD || imageSkewAngle < -(MINIMUM_DESKEW_THRESHOLD))) {
bi = ImageHelper.rotateImage(bi, -imageSkewAngle); // deskew image
}
String expResult = "The (quick) [brown] {fox} jumps!\nOver the $43,456.78 <lazy> #90 dog";
String result = instance.doOCR(bi);
logger.info(result);
assertEquals(expResult, result.substring(0, expResult.length()));
}
osdetect.cpp
Tesseract 内で向きとスクリプトを検出するためのメカニズムがいくつかあります。これは Tess4J には反映されないため、この場合は元の c++ コードを操作する方が適切です。Tesseract では、「auto-orientation」に psm 引数を使用します (値の完全なリストについては、この SO の質問を参照してください)。たとえば、psm -0
自動方向付けを提供する必要があります。
Tess4J は、Tesseract 上の単純なラッパーである以上の追加機能を提供しません。そのため、OCR の前に傾斜角度を決定し、画像を回転させる必要があります。