Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】How to Implement OCR in HarmonyOS: A Step-by-Step Guide with Regex

2025年09月22日に「Dev.to」が公開したITニュース「How to Implement OCR in HarmonyOS: A Step-by-Step Guide with Regex」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

HarmonyOSアプリでのOCR実装手順。CameraKitで画像キャプチャ、CoreVisionKitでテキスト認識後、正規表現(Regex)で氏名やID番号など特定情報を抽出する。使用後のリソース解放も必須だ。

ITニュース解説

近年、スマートフォンのカメラは単に写真を撮るだけでなく、様々な便利な機能に活用されている。その中でも特に注目される技術の一つに「OCR(Optical Character Recognition)」、つまり画像から文字を読み取る技術がある。しかし、単に画像から文字を読み取っただけでは、得られるのは連続した「生のテキスト」であり、そこから本当に必要な情報だけを効率的に取り出すことは難しい場合が多い。ここで役立つのが「正規表現(Regex)」という、文字列の中から特定のパターンを持つ部分を効率的に見つけ出すための強力な道具である。

HarmonyOSというオペレーティングシステム向けのアプリケーション開発において、OCRと正規表現を組み合わせることで、身分証明書の番号、氏名、生年月日といった特定のデータを画像から正確に抽出し、アプリの機能性を大きく向上させることができる。この記事では、HarmonyOSアプリでこの一連の処理を実現するための手順を解説している。

この機能を実現するには、まず開発環境としてDevEco Studioがインストールされている必要がある。そして、アプリケーション開発に必要な機能のまとまり(キット)として、カメラを扱うためのCameraKit、画像処理を行うImageKit、OCR機能を提供するCoreVisionKit、そして一般的なアプリの機能を提供するAbilityKitをプロジェクトで利用可能にしておく必要がある。基本的なプログラミング言語であるTypeScriptの知識も前提となる。

最初のステップは、HarmonyOSアプリでカメラを設定し、画像を撮影できるようにすることである。HarmonyOSにはCameraKitという便利なツールキットが用意されており、これを使うことでカメラの機能を簡単に利用できる。具体的には、まずカメラを管理する「カメラマネージャー」を取得し、利用可能なカメラデバイスの中から背面カメラを選択する。次に、選択したカメラから入力される映像を管理する「カメラ入力」を設定し、それを開くことでカメラの準備が完了する。

撮影した映像を画面に表示するための「プレビュー出力」や、実際に写真を撮影するための「写真出力」も設定する。特に写真出力に関しては、写真が撮影された際に自動的に実行される処理を登録しておくことが重要だ。これは「photoAvailable」というイベントを監視する仕組みで、写真が撮影されるとそのイベントが発生し、その時に写真のデータ(imageObj)を受け取り、後続のOCR処理へと渡すことができるようにする。これら全ての要素を組み合わせて「キャプチャセッション」という撮影の流れ全体を管理するものを作成し、開始することで、カメラは撮影可能な状態となる。実際に写真を撮る際には、設定した写真出力に対してcapture()という命令を呼び出すだけで良い。

カメラで画像が撮影され、データとして取得されたら、次のステップはCoreVisionKitを使ってその画像から文字を認識する、つまりOCRを実行することである。撮影された画像データは通常、生のバイト列(ArrayBuffer)として扱われるため、CoreVisionKitが認識できる形式へと変換する必要がある。具体的には、この画像データから「ImageSource」を作成し、さらに「PixelMap」という、画像データをピクセル単位で扱える形式に変換する。このPixelMapが、OCR機能の中心となるrecognizeText()というAPIに渡される。

recognizeText()は、渡されたPixelMapの中から文字を探し出し、それをデジタルなテキストデータとして抽出し、結果を文字列として返す。例えば、身分証明書全体が写った画像を与えると、そこに含まれる全ての文字を読み取り、一つの長いテキストとして出力する。文字認識が完了したら、使用したImageSourceやPixelMapなどの画像リソースは、適切に解放してシステムの負荷を軽減することが重要である。

OCRによって画像から全ての文字が読み取られ、一つの長いテキストとして手元に届いたとする。しかし、この生のテキストの中から「氏名」や「生年月日」といった特定の情報だけを正確に抜き出すのは骨の折れる作業だ。ここで正規表現(Regex)が本領を発揮する。正規表現は、特定の文字列のパターンを定義することで、そのパターンに一致する部分をテキストの中から見つけ出すことを可能にする。

例えば、身分証明書からID番号を抽出したい場合、「T.C. Kimlik No: の後に続く11桁の数字」といったパターンを正規表現で記述できる。同様に、氏名や生年月日など、それぞれの情報に対応するパターンを定義しておく。記事には、トルコのIDカード(TCKN)や氏名、生年月日、性別、書類番号などを抽出するための具体的な正規表現パターンが例として示されている。例えば、姓を抽出するパターンは、「Soyadı または Surname の後に、空白やコロンを挟んで大文字アルファベットが続く部分」を意味するよう定義されている。

これらのパターンを使って、OCRで得られた長いテキストの中から、それぞれの情報に合致する部分をmatch()というメソッドで探し出す。match()メソッドは、パターンに一致する部分が見つかると、その情報を含む配列を返す。特に、パターンの中でカッコで囲まれた部分(キャプチャグループ)は、抽出したい実際のデータとして個別に取得できる。例えば、(?:Soyadı|Surname)[\s:]*([A-ZÇĞİÖŞÜ]+)というパターンでは、最後の([A-ZÇĞİÖŞÜ]+)の部分が実際に抽出したい「姓」の文字列に対応し、これを結果の配列の[1]番目の要素として取り出すことで、生のテキストから必要な姓のデータだけを抽出できる。このようにして、ID番号、氏名、生年月日、性別といった様々な情報を、定義したパターンに基づいて正確に抽出し、整理されたデータ構造(例えばJSON形式)として得ることが可能となる。

アプリがカメラの使用を終えたら、カメラの入力、プレビュー出力、写真出力、キャプチャセッションといったカメラ関連のリソースを適切に解放することが非常に重要である。これは、システムのメモリやバッテリーを不必要に消費しないようにするため、また他のアプリがカメラを利用できるようにするために不可欠なプロセスだ。

これらの技術を組み合わせることで、HarmonyOSアプリ開発者は、画像から文字を読み取り、そこから意味のある特定の情報を構造化された形で抽出する、スマートで効率的なOCR機能を実装できる。身分証明書の読み取り、レシートからの金額抽出、名刺からの連絡先情報取得など、様々な応用が可能となり、アプリの利便性を大きく向上させることが期待される。

関連コンテンツ

関連IT用語

関連ITニュース