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

【ITニュース解説】Blurring license plates in 10,000 photos with Python — and knowing which ones to check

2026年09月29日に「Dev.to」が公開したITニュース「Blurring license plates in 10,000 photos with Python — and knowing which ones to check」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

PythonとAI APIを使い、大量の写真(1万枚)から車のナンバープレートを自動でぼかす方法を紹介する。単にぼかすだけでなく、ぼかしの信頼性が低い画像やナンバープレートが見つからない画像を効率的に検出し、手動で最終確認する仕組みを構築する。

ITニュース解説

デジタル化が進む現代において、画像データに写り込む個人情報、特に車のナンバープレートの取り扱いは重要な課題の一つだ。例えば、大量の写真を公開したり、人工知能(AI)の学習データとして使ったりする場合、写っているナンバープレートをぼかし処理して個人を特定できないようにする必要がある。しかし、数枚の写真なら手作業でぼかせるが、10,000枚もの写真となると、一つ一つ手作業でプレートの位置を探し、ぼかすのは現実的ではない。これがこのニュース記事が解決しようとしている課題の出発点である。

このような課題に対し、API4AIの「Image Anonymization API」というサービスが非常に有効な解決策を提供している。このAPIは、AIの力を借りて、写真の中から自動的にナンバープレートを検出し、プライバシー保護のためにぼかし処理を施してくれる。さらに、顔が写っている場合も、必要に応じて同様にぼかすことが可能だ。このAPIの素晴らしい点は、ナンバープレートや顔以外の部分には一切手を加えず、元の写真の風景や雰囲気をそのまま残してくれることにある。これは、車のアーカイブ写真、レンタカーの車両管理、オンラインマーケットプレイスへの出品画像、ストリートスナップ、AI学習用データセットなど、様々な場面で活用できる。

APIを利用するには、専用のURLに対してHTTPリクエストと呼ばれる通信を行う。記事にはcurlコマンドの例が示されているが、これはWebサービスとのやり取りをコマンドラインで行うためのツールであり、Pythonなどのプログラミング言語からでも同様の通信が可能だ。リクエストを送る際には、APIキーと呼ばれる認証情報と、処理したい画像データを一緒に送る。特に重要なのは、どの部分をぼかしたいかをAPIに伝えるための「モード」指定だ。例えば、mode=hide-clpと指定すれば「車のナンバープレートを隠す」という意味になり、ナンバープレートだけをぼかしてくれる。顔もぼかしたい場合はmode=hide-faceを追加する。もしモードを指定しないと、APIが対応しているナンバープレートと顔の両方を自動的にぼかしてしまうので、意図しない処理を防ぐためにもモードの指定は意識すべき点である。画像データは、ファイルとして直接送るか、インターネット上に公開されている画像のURLを指定して送ることができる。

APIに画像を送信すると、数秒から数十秒で処理が完了し、結果が「JSON(JavaScript Object Notation)」という形式で返ってくる。JSONは、Webサービス間でデータをやり取りする際によく使われる、人間にも機械にも読みやすいデータ形式である。返ってくるJSONデータには、主に二つの重要な情報が含まれている。一つは、ぼかし処理が施された新しい画像データそのものだ。この画像データは「Base64エンコード」という形式で表現されている。これは、画像のようなバイナリデータをテキスト形式に変換する手法で、Web通信で安全にデータを送るために使われる。変換されたテキストデータを元に戻せば、ぼかし済みの画像が手に入る。

もう一つ重要な情報は、「隠されたオブジェクト」に関する詳細だ。これには、ぼかされたナンバープレートや顔が写真のどこにあったかを示す「バウンディングボックス」という情報が含まれる。バウンディングボックスは、オブジェクトを囲む四角形の座標とサイズを指し、画像内の相対的な位置として表現される。さらに、各オブジェクトが「どれくらいの確信度(信頼度)」でナンバープレート(または顔)として検出されたかを示す数値も含まれている。この信頼度は0から1の間の値で表され、1に近いほどAIが「これはナンバープレートである」と強く確信していることを意味する。記事の例では、信頼度が0.56という比較的低い値が示されており、これはAIがぼかし処理は行ったものの、その判断に少し迷いがあったことを示唆している。この「信頼度」こそが、後で大量の写真を効率的に確認する上で非常に重要な手がかりとなる。

API利用におけるいくつかの注意点も挙げられている。まず、APIが画像の読み込みに失敗した場合でも、HTTP通信上は成功を示す「HTTP 200 OK」が返ってくることがある。この場合、JSONデータ内のstatus.codeが「failure」となり、失敗した理由がstatus.messageに記載されるため、単にHTTPステータスコードだけを見るのではなく、JSONの中身をしっかり確認する必要がある。また、JSONデータから特定の情報を取得する際は、データが常に同じ順番で並んでいるとは限らないため、配列のインデックス(何番目のデータか)ではなく、kindという属性(データの種類)を使って目的の情報を指定するのが安全な方法だ。処理できる画像には、JPEG、PNG、PDF形式で、ファイルサイズが16MB以下、解像度が4096x4096ピクセル以下という制限がある。

次に、このAPIを実際に10,000枚もの写真に適用し、さらにその結果を効率的に管理するためのPythonスクリプトについて見ていこう。このスクリプトは、標準のPythonライブラリとrequestsライブラリ(HTTPリクエストを簡単に送るためのライブラリ)を組み合わせて作られている。主な機能は以下の通りだ。まず、指定された写真フォルダを再帰的に走査し、処理対象の画像ファイルを全て見つけ出す。そして、見つけ出した画像をAPIに送信する際、一度に8枚ずつ並行して処理を行うことで、処理速度を向上させている。

このスクリプトは非常に実用的な工夫が凝らされている。例えば、以前に処理した写真が既に存在する場合は、その写真をスキップして次の写真の処理に移る。これにより、途中でスクリプトが停止したり、手動で中断したりした場合でも、最初からやり直す必要がなく、途中から処理を再開できる「レジューム機能」を実現している。APIへのアクセスが一時的に集中しすぎたり(レート制限)、APIを提供するサーバー側で一時的なエラーが発生したりする可能性もあるが、スクリプトはこれらの状況を検知すると、1秒、2秒、4秒と待機時間を伸ばしながら最大4回まで自動的にリトライする機能を備えている。これにより、一時的なネットワークの問題やAPIの混雑による失敗を減らすことができる。

さらに、APIから「failure」というステータスが返ってきた場合、その失敗を単に無視するのではなく、その旨を記録し、エラーメッセージも併せてログに出力する。これにより、どの写真がどのような理由で処理に失敗したのかを後から確認できる。処理後の写真は、元のフォルダ構造を保ったまま別の出力フォルダに保存されるため、元の写真と対応関係を容易に保てる。そして最も重要なのは、処理した全ての写真と、検出されたナンバープレートの情報、その信頼度を詳細に記録した「plates.csv」というCSVファイルを生成することだ。このCSVファイルは、後の「どの写真を確認すべきか」という課題を解決するための鍵となる。スクリプトの実行が終わると、処理された写真の総数と、成功、スキップ、失敗のそれぞれの写真数が表示されるため、処理が適切に行われたかどうかの最終確認も容易だ。

さて、10,000枚もの写真すべてがぼかし処理されたとして、それでも「この写真が適切に匿名化されているか」を人がすべて目視で確認するのは、やはり現実的ではない。ここで、先ほど説明した「信頼度」と、スクリプトが生成した「plates.csv」ファイルが真価を発揮する。このCSVファイルには、各写真の処理結果、検出されたプレートの数、そして各プレートのバウンディングボックスと信頼度が記録されている。

人が確認すべき写真を選び出す方法は二つある。一つは、「信頼度が低い」と判断された写真だ。先ほどの例のように、AIが「これはナンバープレートだ」と確信する度合いが低い写真、例えば信頼度が0.6を下回るような写真には、誤ってプレートを見落としていたり、あるいはぼかし方が不十分であったりする可能性が潜んでいる。このような写真を優先的に確認することで、AIの判断が曖昧だった部分に人の目を集中させることができる。信頼度の閾値(例えば0.6)は、実際にいくつかの写真を見て、どの程度の信頼度のものが確認に値するかを判断し、適宜調整することが可能だ。

もう一つは、「ナンバープレートがゼロ」と記録されている写真の中から、本来ナンバープレートが写っているべき写真を探し出すことだ。例えば、車の正面や背面が写っている写真にもかかわらず、APIがナンバープレートを一つも検出しなかった場合、それは「プレートがない車」である可能性もあれば、「AIがプレートを見落としてしまった」可能性もある。この場合も、人が確認することで、もし見落としがあったとしても、その場で修正できる。

このようにして、CSVファイルを分析することで、数万枚の写真の中から、人が本当に目を通すべき「数百枚」程度の写真に絞り込むことができる。選ばれた写真群は、信頼度が低い順に並べ替えるなどして、より効率的にレビューを進めることが可能だ。さらに、CSVに記録されているバウンディングボックス情報を使えば、ぼかし処理されたナンバープレートの部分だけを切り出して一覧表示する「コンタクトシート」のようなものを作成し、短時間で確認を済ませることもできる。これにより、大量のデータの中から、人の確認が本当に必要な「リスクの高い部分」を効率的に見つけ出し、プライバシー保護の抜け漏れを防ぐことができるのである。

APIの利用には費用がかかる。このAPIは「従量課金制」で、1,000回のリクエスト(つまり1,000枚の写真)あたり25ドルが目安となっている。したがって、10,000枚の写真を処理する場合は約250ドルかかる計算になる。APIキーの取得や料金体系の詳細は、API4AIの開発者ポータルで確認できる。

もし自分でコードを書かずに匿名化処理を行いたい場合や、特定の用途がある場合は、別の選択肢も存在する。例えば、数枚の写真であれば、API4AIのウェブサイトにあるデモページに直接写真をアップロードして、無料でぼかし処理の結果を試すことができる。また、もし車の販売店などで、ナンバープレートのぼかし処理に加えて、写真の背景もすべて均一なものに置き換えたい(例えば、すべての車を同じ白い背景にする)という場合は、API4AIが提供する「CarBG」という別のサービスが利用できる。CarBGは背景の切り抜きとプレートのぼかしを一度に行うが、元の風景を残したい場合には向かない。このニュース記事は、大量の画像データの中から個人情報を効率的かつ確実に匿名化するための具体的な手法と、その後の人的確認プロセスを最適化する重要性を示している。AIの力を借りて自動化を進めつつも、AIの判断の不確かさを理解し、人の目による最終確認をいかに賢く行うかという、システム開発における重要な視点を提供していると言えるだろう。

関連コンテンツ

関連IT用語

関連ITニュース