web-dev-qa-db-ja.com

画像処理コードを単体テストする方法は?

私は画像処理(主にOCR)に取り組んでおり、開発に単体テストをどのように統合する必要があるのでしょうか。

より「一般的な」タイプのコードに単体テストをすでに使用していますが、画像処理コードを処理するとき、それをどのように処理するかわかりません。この種のコードには常に何らかの画像データの入出力が必要であり、これをあざけるのは明らかではありません。今のところ、私は主に統合テストを行っていますが、実行に時間がかかるので、この種のコードをユニットテストに分割して、より迅速に実行できるようにする方法についていくつかのアイデアが欲しいです。

編集:キャラクターの分析は、複数の回転、スケーリング、形態学的操作を含む多くのステップを経ることがあります。これらのステップは、アルゴリズムの開発中に頻繁に変更されます。したがって、入力と期待される出力は、テスト中に大幅に変化する可能性があります。各文字は100x100ピクセルになる可能性があるため、コード内でのハードコーディングまたは生成されたデータの操作は問題外です。

14
rold2007

私はビデオ録画/分析/ストリーミングソフトウェアを使用していて、非常によく似た問題に直面しました。以下は私たちの解決策でしたが、長期的にどのように機能するかはわかりませんが、現時点では機能しているようです。

ユニットテストプロジェクトにリソースとして入力/出力画像を保存します。次に、単体テストで、特定の入力が与えられると、その特定の出力が生成されることを確認します。

コードをリファクタリングして他の機能を追加する9/10回、画像処理ルーチンの動作が変更されないことが予想されるため、突然のユニットテストがすべて失敗した場合は、エラーが原因である可能性があります。

一方、実際のアルゴリズムに変更を加えると、ユニットテストも失敗します。この場合、手動または視覚的に結果が正しいことを確認し、結果が適切である場合は、画像リソースを更新してユニットテストに再度合格する必要があります。

私たちのプロジェクトでは、入力と出力の両方にデータを提供できる「偽の」(可能であれば模擬)ビデオソースを開発しました。しかし、データ自体は偽物ではなく、手動テストを実行してすべてが機能していることを確認したときに、実行中のシステムからヘルパーデータ記録クラスを使用して実際にキャプチャされました。

12
DXM