<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>OCR on Alicey's blog</title><link>https://blog.alicey.dev/tags/ocr/</link><description>Recent content in OCR on Alicey's blog</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Mon, 30 Aug 2021 15:19:36 +0900</lastBuildDate><atom:link href="https://blog.alicey.dev/tags/ocr/index.xml" rel="self" type="application/rss+xml"/><item><title>PythonとOCRで数字を振り分け - 2</title><link>https://blog.alicey.dev/2021/06/pythonocr-2.html</link><pubDate>Sun, 27 Jun 2021 23:53:00 +0900</pubDate><guid>https://blog.alicey.dev/2021/06/pythonocr-2.html</guid><description>&lt;h1>  PythonとOCRで数字を振り分け - 2&lt;/h1>&lt;div>&lt;br>&lt;/div>&lt;h2>はじめに&lt;/h2>&lt;div>前回(&lt;a href="https://blog.alicey.dev/2021/06/pythonocr.html" target="_blank">こちら&lt;/a>)の続きです。結果を見ていると、どうも7のフォルダに7と空白(真っ白)の画像が多く分類されてしまうことがわかりました。これでは、学習データとして使用するにも不便です。&lt;/div>&lt;div>&lt;div class="separator">&lt;br>&lt;/div>&lt;div class="separator">&lt;a href="https://blog.alicey.dev/2021/06/pythonocr-2/img/05b531366182c543_hu9791591866846304080.webp" class="lightbox-trigger">
 &lt;img src="https://blog.alicey.dev/2021/06/pythonocr-2/img/05b531366182c543_hu9791591866846304080.webp"
 alt=""
 width="1323"
 height="789"
 loading="lazy" decoding="async">
 &lt;/a>&lt;br>&lt;br>&lt;/div>そこで今回は、これらの空白画像を別のフォルダに移動するアプローチを考えていきます。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;h2>どうするの？&lt;/h2>&lt;div>そもそも、画像データというのは、（pngやjpgなどは圧縮されバイナリ化されてますが、考え方としては、各場所、各色の明るさを示す）数値の集まりです。配列があり、座標に該当する場所に色コードが格納されている...といえば良いのでしょうか？&lt;/div>&lt;div>大きさが10*10の画像が在るとすれば、一番左上の画素はpic[0][0]、右下の画素は[9][9]のようになり、それぞれに値としてRGB(255,255,255)のように格納されています。今回はこれを活用します。&lt;/div>&lt;div>今回の画像は白黒ですので、グレースケールとして読み込み、それぞれの値をRGB(255,255,255)ではなく、明るさのみの(0)から(255)のデータにします。&lt;/div>そして、これらデータが格納されている配列の最小値が230(任意の値)より多きければその画像は真っ白である。と考えることにしましょう。&lt;/div>&lt;div>ここまでくれば簡単です。上記に一致する際にファイルを移動するだけ。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;h2>実際のコード&lt;/h2>&lt;div>これを実際にコーディングしてみました。&lt;/div>&lt;div>処理には主にopenCVとnumpyを利用しています。&lt;/div>&lt;div>コードは&lt;a href="https://github.com/Alicey0719/writeImageCheck" target="_blank">GitHub&lt;/a>に掲載します。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;h2>結果&lt;/h2>&lt;div>結果としては、まずまず良い出来でした。&lt;/div>&lt;div>2-3枚の取りこぼしはありましたが、ほぼほぼ移動することに成功しました。&lt;/div>&lt;div>その数なんと約2000枚。これを手動でやったら大変です。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;a href="https://blog.alicey.dev/2021/06/pythonocr-2/img/027f1a3177989c7f_hu14206946196782596018.webp" class="lightbox-trigger">
 &lt;img src="https://blog.alicey.dev/2021/06/pythonocr-2/img/027f1a3177989c7f_hu14206946196782596018.webp"
 alt=""
 width="366"
 height="263"
 loading="lazy" decoding="async">
 &lt;/a>&lt;div class="separator">&lt;br>&lt;/div>&lt;div class="separator">&lt;a href="https://blog.alicey.dev/2021/06/pythonocr-2/img/28532950a6f289fb_hu2800102970389553289.webp" class="lightbox-trigger">
 &lt;img src="https://blog.alicey.dev/2021/06/pythonocr-2/img/28532950a6f289fb_hu2800102970389553289.webp"
 alt=""
 width="1307"
 height="736"
 loading="lazy" decoding="async">
 &lt;/a>&lt;br>&lt;br>&lt;/div>&lt;br>&lt;/div>&lt;h2>まとめ&lt;/h2>&lt;div>今回の空白画像の振り分けはうまくいったと思います。&lt;/div>&lt;div>特に、同じようなデータが大量にある際は、プログラムを書いたほうが楽で速いということを改めて実感しました。&lt;/div>&lt;div>またこのような問題があれば記事にしたいと思います。&lt;/div>&lt;div>それでは&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>ばいち&lt;/div></description></item><item><title>PythonとOCRで数字を振り分け</title><link>https://blog.alicey.dev/2021/06/pythonocr.html</link><pubDate>Thu, 10 Jun 2021 23:41:00 +0900</pubDate><guid>https://blog.alicey.dev/2021/06/pythonocr.html</guid><description>&lt;h1> PythonとOCRで数字を振り分け&lt;/h1>&lt;div>とある作業で、数字が書かれた画像を数万ファイル振り分けなければいけなくなった。&lt;/div>&lt;div>手作業でやるのは.....流石にダルいため、PythonとOCRを利用し、どこまで仕分けできるかやってみることにした。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;h3>結論&lt;/h3>&lt;div>あまり精度が良くない。&lt;/div>&lt;div>私のやり方や、数字が書かれた画像データの解像度、背景色など、さまざまな要因は在ると思うが、あまり精度が良くない、という結果に終わった。&lt;/div>&lt;div>特に3,4,7あたりが怪しく、0や8はほぼほぼ正解しているというような結果であった。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>0のフォルダ&lt;/div>&lt;div>&lt;div class="separator">&lt;a href="https://blog.alicey.dev/2021/06/pythonocr/img/367676f97d99edf4_hu5795718334090095031.webp" class="lightbox-trigger">
 &lt;img src="https://blog.alicey.dev/2021/06/pythonocr/img/367676f97d99edf4_hu5795718334090095031.webp"
 alt=""
 width="1224"
 height="642"
 loading="lazy" decoding="async">
 &lt;/a>&lt;br>&lt;br>&lt;/div>&lt;div class="separator">&lt;br>&lt;/div>&lt;div class="separator">3のフォルダ&lt;/div>&lt;a href="https://blog.alicey.dev/2021/06/pythonocr/img/759013a7c9bc45ae_hu12725312635091612360.webp" class="lightbox-trigger">
 &lt;img src="https://blog.alicey.dev/2021/06/pythonocr/img/759013a7c9bc45ae_hu12725312635091612360.webp"
 alt=""
 width="1221"
 height="637"
 loading="lazy" decoding="async">
 &lt;/a>&lt;br>&lt;br>&lt;div class="separator">&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>しかし、数万件手作業で振り分けるよりは効率が良いようにも思える。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;h3>方法&lt;/h3>&lt;/div>&lt;div>今回は、Python, PyOCR, &lt;span face='-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"' style="color: #24292e; font-size: 16px">Tesseractを用いた方法で分類した。&lt;/span>&lt;/div>&lt;div>&lt;span face='-apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"' style="color: #24292e; font-size: 16px">&lt;br>&lt;/span>&lt;/div>&lt;div>ソースコードはこちら: &lt;a href="https://github.com/Alicey0719/numOcr" target="_blank">GitHub&lt;/a>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>仕組みは簡単で、ソースフォルダ内にある画像を全て読み取り、OCRで読み取ったテキストが、フォルダが用意されているものであればそのフォルダに振り分ける、用意されていなければOtherフォルダに入れる。&lt;/div>&lt;div>それだけである。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>今回数字を抽出するに当たり、英語ベースでの識字をしている。これは日本語に比べ英語が文字数が少ないことから誤認識の確率を減らす効果があると思われる。&lt;/div>&lt;div>また、tesseract_layoutを8にすることで、画像を1つの単語として扱っている。&lt;/div>&lt;div>&amp;gt; tesseract --help-psm&lt;/div>&lt;div>&lt;a href="https://blog.alicey.dev/2021/06/pythonocr/img/1158d278d96a18aa_hu10133408608751680284.webp" class="lightbox-trigger">
 &lt;img src="https://blog.alicey.dev/2021/06/pythonocr/img/1158d278d96a18aa_hu10133408608751680284.webp"
 alt=""
 width="657"
 height="293"
 loading="lazy" decoding="async">
 &lt;/a>&lt;br>&lt;br>&lt;/div>&lt;h3>まとめ&lt;/h3>&lt;div>以上が実験の結果である。&lt;/div>&lt;div>使えなくはないが、常用するツールではない。そんな印象である。&lt;/div>&lt;div>自分の用途に合った文字データを学習させることで、より精度の高いOCRができる可能性があるため、またトライしてみたいと思う。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>また、この技術は先日話題になっていた、ワクチン用冷蔵庫の監視をWebカメラで行うというものでも活用でき、冷蔵庫に監視するような機能がなくとも、カメラで取得した画像をOCRで値にし、サーバに送信することで、異常値が出たらアラートを出すといった対応もできる、非常に有用な技術だと思われる。OCRは印刷物をコピペできるようにするためだけのものじゃない！すごい！&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>続:  &lt;a href="https://blog.alicey.dev/2021/06/pythonocr-2.html" target="_blank">PythonとOCRで数字を振り分け-2&lt;/a>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>参考&lt;/div>&lt;div>&lt;ul>&lt;li>&lt;a href="https://qiita.com/nabechi6011/items/3a367ca94dbd208efcc7" target="_blank">Tesseract+PyOCRで簡易OCRを試してみる&lt;/a>&lt;/li>&lt;li>&lt;a href="https://qiita.com/d_m/items/4690aa9f03bb13bf1d21" target="_blank">[Python]グラフ画像内の数字をOCRで取得する&lt;br>&lt;/a>&lt;/li>&lt;/ul>&lt;div>&lt;span style="color: #0000ee">&lt;u>&lt;br>&lt;/u>&lt;/span>&lt;/div>&lt;div>&lt;span style="color: #0000ee">&lt;u>&lt;br>&lt;/u>&lt;/span>&lt;/div>&lt;div>&lt;span style="color: #0000ee">&lt;u>&lt;br>&lt;/u>&lt;/span>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>ばいち&lt;/div>&lt;br>&lt;/div></description></item></channel></rss>