質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.06%

zinniaを使用したスタンドアローンアプリの開発について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 137

score 1

zinnia(機械学習ベースのポータブルなオンライン手書き文字認識エンジン)を使ったスタンドアローンのアプリケーション(windows10で動作させたい)を作りたいと思っています。
cygwinをインストール後、zinniaパッケージをインストールし、pythonで動作確認はできたのですが、それをpyinstallerでexe化する所で
「ImportError:No module named _zinnia
During handling of the above exception, another exception occurred:」
と出力されて困ってしまいました。
分からないことだらけなのですが助けていただければと思います。
環境 windows10 cygwin python2.7.18 pyinstaller3.6

追記
ちなみにc++では動かすこともできていません。g++ example.cpp -Lllibzinnia でコンパイルしようとすると「undefined reference to '_imp_ZN6zinnia10Recognizer6createEV'」などとerrorが出力されます(collect2.exe:error:ld returned 1 exit status)。
こちらも手助けいただけると幸いです。

追記2
visual studio2019でzinniaのdollを使ってビルドすることに成功はしたのですが、出力結果が文字化け?して難しい漢字ばかりが出力されます。問題の切り分けが自分では難しく困っています。どのような原因が考えられるでしょうか。
(cygwinにてcygwin i686-pc-cygwin-gccをインストールしてexample.cをコンパイルすることに成功しました!しかし同様にしてcygwin i686-pc-cygwin-g++でexample.copはコンパイルできません。なぜなのでしょう。。。)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dice1989

    2021/05/03 18:16

    visual studio 2019をインストールしてc++にてプロジェクトを作成したところビルドに成功しました!ですが、新たな問題が・・・。出力が文字化け(難しい漢字が出力されているパターン)してしまっています。どのような設定が必要なのでしょう。もう少し調べて分からなかったら新たに質問させてください。

    キャンセル

  • jbpb0

    2021/05/05 09:38

    > 出力が文字化け

    visual studioでコンパイルしてできたexeをコマンドプロンプトで実行してるのでしたら、表示できる文字コードを変更してみてください
    https://www.javadrive.jp/command/display/index5.html

    キャンセル

  • dice1989

    2021/05/05 14:16

    コマンドプロンプトで文字コードをUTF-8に変更して文字化けせずに表示されました!ありがとうございます。ですが、自分でcout << "確認" <<endl;とexample.cppに追記した部分は逆に文字化けしました。文字コードをプログラム内でそろえる?という作業があるのでしょうか。
    ちなみにvisutal studioでデバッグコンソールも文字コードを変更する設定があるのでしょうか。

    キャンセル

回答 1

check解決した方法

0

押していただいたことを含めてなんとかなったので解決に至った方法を記載します(無理やり自己流?でなんとかした部分もあります)
まず環境ですが、visual studio2019 で行いました。以下覚書を含めて。

新規プロジェクトを空のプロジェクトから作成
→ソリューションエクスプローラーでプロジェクト名を右クリックして追加、新しい項目でmain.cppファイルを作成(下記のmain.cppの中身をコピー)
→同様にヘッダファイルもzinnia.hの内容をコピーして作成→プロジェクトフォルダにbinとlibというディレクトリを作成
→binにはlibzinnia.dllをlibにはlibzinnia.libを入れておく
→ソリューションエクスプローラーでプロジェクト名を右クリックしてプロパティ▶構成プロパティの全般に出力ディレクトリがあるので$(SolutionDir)bin\と入力(.dllをbinに入れたので)▶リンカ―の全般に追加のライブラリディレクトリがあるので$(SolutionDir)lib\と入力(.libをlibに入れたので)
→▶リンカ―の入力に追加の依存ファイルがあるのでlibzinnia.libと入力
→最後にmain.cppやzinnia.hがあるディレクトリにモデルファイルを置く

これでなんとか動きました。出力された結果が自分の欲しい結果と一致しているか確かめるために
resulut-value(i)をstringに変換し確かめたい文字列もu8でUTF-8に変換?して一致しているかを確かめることに成功しました。もっとスマートな方法があると思われますが。いったん解決とさせていただきます。ご協力ありがとうございました。jbpb0さんには大変感謝しております。どうもありがとうございました。

//main.cpp

include <iostream>

include "zinnia.h"

using namespace std;

int main(int argc, char** argv) {
SetConsoleOutputCP(CP_UTF8); //コンソールをUTF-8出力に→これでデバッグコンソールにUTF-8で出力できた
zinnia::Recognizer* recognizer = zinnia::Recognizer::create();
if (!recognizer->open("handwriting-ja.model")) {
cerr << recognizer->what() << endl;
return -1;
}

zinnia::Character* character = zinnia::Character::create();
character->clear();
character->set_width(300);
character->set_height(300);
character->add(0, 51, 29);
character->add(0, 117, 41);
character->add(1, 99, 65);
character->add(1, 219, 77);
character->add(2, 27, 131);
character->add(2, 261, 131);
character->add(3, 129, 17);
character->add(3, 57, 203);
character->add(4, 111, 71);
character->add(4, 219, 173);
character->add(5, 81, 161);
character->add(5, 93, 281);
character->add(6, 99, 167);
character->add(6, 207, 167);
character->add(6, 189, 245);
character->add(7, 99, 227);
character->add(7, 189, 227);
character->add(8, 111, 257);
character->add(8, 189, 245);

zinnia::Result* result = recognizer->classify(*character, 10);
if (!result) {
cerr << recognizer->what() << endl;
return -1;
}
for (size_t i = 0; i < result->size(); ++i) {
cout << result->value(i) << "\t" << result->score(i) << endl;
if (string(result->value(i)) == u8"春") {
cout << "***********" << endl;
} //一致を確かめるテスト
}
cout << u8"確認" << endl;
delete result;

delete character;
delete recognizer;
return 0;
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る