OSD(文字の重ね合わせ)
1.1. OSDの概要
一部のアプリケーションシナリオ(例:IPカメラ)では、画像に透かしを入れる要件があり、特に【日本語などのマルチバイト文字)の透かし】を描画する必要があります。しかし、OpenCV自体はデフォルトでこれらアジア言語の文字描画をサポートしていません。このような状況に対応するため、EASY EAI apiは、画像に文字を描画することに特化したフォントエンジンをカプセル化して提供しています。

1.1. OSDの概要 図10
1.2. クイックスタート
1.2.1 開発環境の準備
PC上のUbuntuシステムで runスクリプトを実行し、EASY-EAIコンパイル環境に入ります。詳細は以下の通りです。
cd ~/develop_environment./run.sh 22041.2.2 ソースコードのダウンロードとサンプルのコンパイル
EASY-EAIコンパイル環境下で、ソースコードリポジトリを管理するディレクトリを作成します。
cd /optmkdir EASY-EAI-Toolkitcd EASY-EAI-Toolkit- ダウンロードリンク: Demos.zip 上記のリンクから Demos.zip 圧縮ファイルをダウンロードし、仮想マシンの /opt/EASY-EAI-Toolkit ディレクトリにアップロードして解凍します。 対応するサンプルのディレクトリに移動し、コンパイル操作を実行します。具体的なコマンドは以下の通りです。
cd EASY-EAI-Toolkit-1126B/Demos/common-font_engine/./build.sh cpres💡 注意 : 依存ライブラリがボード上に配置されているため、クロスコンパイル中は必ず/mnt のマウントを維持してください。

1.2.2 ソースコードのダウンロードとサンプルのコンパイル 図12
1.2.3 サンプルの実行
シリアルデバッグまたはSSHデバッグを通じてボードのバックグラウンドに入り、サンプルが配置されている場所に移動します。以下の通りです。
cd /userdata/Demo/common-font_engine
1.2.3 サンプルの実行 図13
サンプルの実行コマンドは以下の通りです。
./test-font_engine1.2.4 実行結果
実行結果は以下のようになります。
テストプログラムを実行すると、「result.jpg」という名前の画像が生成されます

1.2.4 実行結果 図14
【コンパイルウィンドウ】に戻り、eog コマンドを使用して直接画像を開きます。
eog /mnt/userdata/Demo/common-font_engine/result.jpg &eog /mnt/userdata/Demo/common-font_engine/testPic.png &
1.2.4 実行結果 図15
これにより、元の画像の上にが重ね合わされていることを確認できます。 もし EASY-EAI コンパイル環境で eogコマンドが見つからないというプロンプトが出た場合は、以下の操作でインストールしてください。
sudo apt-get updatesudo apt-get install eogまたは、画像をボードからPCにコピーすることも可能です。
cp /mnt/userdata/Demo/common-font_engine/result.jpg ./ReleaseAPIの詳細な説明、およびAPIの呼び出し(本サンプルのソースコード)については、以下の説明を参照してください。
1.3. 文字列操作APIの説明
1.3.1 インクルード/参照方法
EASY EAI api ライブラリは、本リポジトリの easyeai-apiディレクトリにあります。お客様がローカルプロジェクトで EASY EAI apiライブラリを直接呼び出せるように、プロジェクト内でリンクする必要があるライブラリやヘッダーファイル等を以下にリストアップしています。
| 説明 | CMakeでの記述 | Makefileでの記述 |
|---|---|---|
| api.cmake | ${common_root}/font_engine/api.cmake | 無し |
| ヘッダーファイルディレクトリ | ${FONT_ENGINE_INCLUDE_DIRS} | -I ../../easyeai-api/common/font_engine |
| ソースファイルディレクトリ | ${FONT_ENGINE_SOURCE_DIRS} | ../../easyeai-api/common/font_engine |
| ライブラリファイルディレクトリ | 無し | 無し |
| ライブラリリンクパラメータ | ${FONT_ENGINE_LIBS} | 無し |
APIソースコードのパスはEASY-EAI-Toolkit-1126B/easyeai-api/common/font_engine/です。ユーザーはソースコードを通じてインターフェースの実装を確認でき、ソースコードを直接変更することも可能です。
1.3.2 グローバルフォントオブジェクトの作成
関数のプロトタイプは以下の通りです。
int32_t global_font_create(const char \*fontLib, const char \*codec);具体的な説明は以下の通りです。
| 関数名:global_font_create() | 詳細 |
|---|---|
| ヘッダーファイル | easyeai-api/common/font_engine/font_engine.h |
| 入力パラメータ | fontLib:読み込むフォントライブラリファイル(例:”./simhei.ttf”) codec:画像に書き込む文字の文字エンコーディング形式(例:utf-8 または gbk など) |
| 戻り値 | 作成成功:0 作成失敗:-1 |
| 注意事項 | 現在のプロセスで既にグローバル文字オブジェクトが作成されている場合、再度呼び出しても必ず -1 が返されます。 |
1.3.3 グローバルフォントオブジェクトの文字エンコーディング設定
関数のプロトタイプは以下の通りです。
int32_t global_font_set_textCodec(const char \*codec);具体的な説明は以下の通りです。
| 関数名:global_font_set_textCodec() | 詳細 |
|---|---|
| ヘッダーファイル | easyeai-api/common/font_engine/font_engine.h |
| 入力パラメータ | codec:画像に書き込む文字の文字エンコーディング形式(例:utf-8 または gbk など) |
| 戻り値 | 設定成功:0 設定失敗:-1 |
| 注意事項 | 事前にグローバルフォントオブジェクトが作成されている必要があります。 |
1.3.4 グローバルフォントオブジェクトのフォントサイズ設定
関数のプロトタイプは以下の通りです。
int32_t global_font_set_fontSize(uint32_t fontSize);具体的な説明は以下の通りです。
| 関数名:global_font_set_fontSize() | 詳細 |
|---|---|
| ヘッダーファイル | easyeai-api/common/font_engine/font_engine.h |
| 入力パラメータ | fontSize:設定する目標のフォントサイズ |
| 戻り値 | 設定成功:0 設定失敗:-1 |
| 注意事項 | 事前にグローバルフォントオブジェクトが作成されている必要があります。 |
1.3.5 画像に指定した文字を書き込む
関数のプロトタイプは以下の通りです。
int32_t putText(uint8_t \*imgData, uint32_t imgWidth, uint32_t imgHeight, const char \*text, uint32_t posX, uint32_t posY, FontColor color);具体的な説明は以下の通りです。
| 関数名:putText() | 詳細 |
|---|---|
| ヘッダーファイル | easyeai-api/common/font_engine/font_engine.h |
| 入力パラメータ | imgData:画像データの先頭アドレス。データ形式はBGR888です。 imgWidth:画像の解像度サイズ(幅)。 imgHeight:画像の解像度サイズ(高さ)。 text:書き込む文字列。 posX:書き込む文字列の左上角のX座標(画像に対する相対位置)。画像の座標原点は左上角です。 posY:書き込む文字列の左上角のY座標(画像に対する相対位置)。画像の座標原点は左上角です。 color:フォントの色値。構造体については後述します。 |
| 戻り値 | 書き込み成功:0 書き込み失敗:-1 |
| 注意事項 | 事前にグローバルフォントオブジェクトが作成されている必要があります。 |
FontColor 構造体:
typedef struct {uint8_t Alpha; // 透明度(アルファ)チャンネルの色値uint8_t Red; // 赤色チャンネルの色値uint8_t Green; // 緑色チャンネルの色値uint8_t Bule; // 青色チャンネルの色値 (※原文ママ)} FontColor;1.3.6 グローバルフォントオブジェクトの破棄
関数のプロトタイプは以下の通りです。
int32_t global_font_destory();具体的な説明は以下の通りです。
| 関数名:global_font_destory() | 詳細 |
|---|---|
| ヘッダーファイル | easyeai-api/common/font_engine/font_engine.h |
| 入力パラメータ | 無し |
| 戻り値 | 破棄成功:0 破棄失敗:-1 |
| 注意事項 | 事前にグローバルフォントオブジェクトが作成されている必要があります。 |
1.4. APIテストケース
サンプルコードのパスは EASY-EAI-Toolkit-1126B/Demos/common-font_engine/test-font_engine.cppです。
以下は各APIの実際の使用例です。
int main(void){// フォントの透明度と色を初期化FontColor color = {200, 135, 189, 67}; // {A, R, G, B};// グローバルフォントを作成global_font_create("./simhei.ttf", CODE_UTF8);// 背景画像を読み込むcv::Mat img = cv::imread("./testPic.png");// 文字を書き込むglobal_font_set_fontSize(80);putText(img.data, img.cols, img.rows, "欢迎使用", 210, 940,color);global_font_set_fontSize(40);putText(img.data, img.cols, img.rows, "欢迎使用", 290, 1020,color);// 文字を書き込んだ後の画像を保存するcv::imwrite("./res.jpg", img);// グローバルフォントを破棄するglobal_font_destory();return 0;}