Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

名刺に特化した文字認識エンジン「NineOCR」

研究開発部Architectグループの堤と申します。新任マネージャーとして自身のキャッチアップも兼ねて、研究開発部の技術や成果物について紹介する記事を書いています。

第三弾となる今回は、Sansanの名刺データ化フローの中で使われている弊社が独自開発した名刺に特化した文字認識エンジン「NineOCR」についてご紹介します。

Sansanの名刺データ化フロー

NineOCRについては本日プレスリリースが出た通り、データ化範囲が名刺記載の「全項目」 1 となり、いずれの項目でも高い読み取り精度を実現しています。

独自開発の背景

名刺のデータ化では、Emailアドレスや電話番号などを1文字間違えただけでも大問題です。

Sansanでは従来より、オペレーションセンターでの人力処理とコンピュータによる処理をうまく組み合わせて、高精度を維持しつつ、コスト削減やスケーラビリティの両立を実現してきました。

精度を厳守しながら、人とコンピュータのバランスを取る

データ化フローにおける文字の読み取り・項目判定の自動化率が向上すれば、さらなるコスト削減・スケール化が可能となります。名刺に特化することで既存の汎用OCRエンジンの精度を超えられる見込みがあったことから、名刺特化型のNineOCRの開発に踏み切りました。

NineOCRのアルゴリズム

Email・氏名版

2020年に、Emailと氏名の認識をサポートしたNineOCR 2リリースしました。まずはこちらの「Email・氏名版」の読み取り処理のアルゴリズムについて解説します。

読み取り処理は、

  1. 文字列検出+項目推定
  2. 文字認識

の順で処理を行います。

Email・氏名の読み取り処理(使用している名刺画像はダミー名刺です)

Email・氏名版では、文字列検出にU-Net 3 ベースのモデルを利用していました。U-Netでセグメンテーションを行い、ピクセル同士の結合を判断してインスタンスに分解することで文字列の矩形を得る、という方式です。

(使用している名刺画像はダミー名刺です)

また、文字の読み取りは、CRNN 4 ベースのモデルを使用して、画像特徴の系列ラベリング問題として解きます。前後の文脈を考慮するため、O(オー)と0(ゼロ)などの判別も可能です。

全項目版

2022年にEmail・氏名に加えて、会社名・部署・役職・住所・郵便番号・電話番号・携帯番号・FAX・URLを認識可能な「全項目版」 と呼ばれる新バージョンがリリースされました。

全項目版の検出結果

上の検出結果を示す画像の枠の色が、各文字列が「住所」や「部署」等の別々の項目として検出されていることを示しています。

NineOCR全項目版は既に実サービスで稼働しています。

Sansan独自のOCRエンジン「NineOCR」がデータ化範囲を名刺記載の全項目に拡大 | Sansan株式会社

全項目対応に伴うモデルの改善としては、大きく2点あります。

一つは、「マルチクラスの文字列検出を可能とするための1stage 物体検出モデルへの移行」です。

単に検出器を物体検出モデルへの移行するだけではありません。 名刺データは入力が小さい画像であるため、一般物体検出よりも小さい領域を検出する必要性があり、名刺に特化した工夫を取り込んでいます。

参考: Feature Pyramid Network 5

もう一点は、「Transformer ベースの複数行文字列認識」です。

部署役職・住所などは名刺上では複数行で表記されることが多いのですが、CRNNベースのモデルは特徴エンコードの際に遷移の方向を仮定するため、基本的に1行認識向けです。

NineOCR全項目版では、Transformer 6 を応用し2D認識を可能にする改良を行っています。

上のアニメーションは、行送りが適切に認識されており、複数行認識が精度高く行われている様子を表しています。

NineOCRの性能

NineOCRはいずれの項目においても高い精度を達成しています。たとえば、住所の読み取り精度は98.3% 7 となっています。 またパフォーマンス面においても、0.3秒 / 枚という高速処理を実現しています。

NineOCRの実装

テックブログなので、NineOCRのアーキテクチャや具体的な実装に関しても踏み込んで書きたいところですが、長くなるのでそれはまた機会があれば別記事にて書きたいと思います。

なお、以下の記事は明言していませんがNineOCRのキャッシュシステムについて書いたものです。

【R&D DevOps通信】自社製OCRのキャッシュシステムについて - Sansan Tech Blog

NineOCRはGEES(弊社の名刺データ化システム)のフローの中で複数回呼ばれるので、結果をキャッシュして使い回すことで計算コストを抑えています。

NineOCRとMLOps

今後もNineOCRをさらに高精度化すべく、学習データ収集の効率化・継続的な性能監視を含めたMLOpsに取り組んでいます。

私は研究開発部のArchitectグループという、研究開発成果をプロダクトとして外に出していくための諸々を担当しているエンジニアチームのマネージャーをしておりまして、まさに今MLOps/DevOpsエンジニアを絶賛募集中です。

求人内容も更新したのでぜひご検討いただけますと幸いです。


  1. 氏名・Email・会社名・部署・役職・住所・郵便番号・電話番号・携帯番号・FAX・URL
  2. 当時は「DSOC OCR」という呼称でした。
  3. ⁻O. Ronneberger et al., ‘U-Net: Convolutional Networks for Biomedical Image Segmentation’, in Medical Image Computing and Computer-Assisted Intervention, 2015, pp. 234–241.
  4. ⁻B. Shi et al., ‘An End-to-End Trainable Neural Network for Image-Based Sequence Recognition and Its Application to Scene Text Recognition’, IEEE Trans. Pattern Anal. Mach. Intell**., vol. 39, no. 11, pp. 2298–2304, Nov. 2017.
  5. T.-Y. Lin et al., ‘Feature Pyramid Networks for Object Detection’, in 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Honolulu, HI, 2017, pp. 936–944.
    1. Vaswani et al., ‘Attention is All you Need’, in Advances in Neural Information Processing Systems, 2017, vol. 30, pp. 5998–6008.
  6. 数字は実在の名刺10,000件をランダム抽出して測定した文字単位の精度。

© Sansan, Inc.