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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1378閲覧

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

dice1989

総合スコア2

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/05/02 14:10

編集2021/05/05 00:05

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はコンパイルできません。なぜなのでしょう。。。)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2021/05/02 21:54 編集

> undefined reference to '_imp_ZN6zinnia10Recognizer6createEV' 「libzinnia.dll」がc++ソースファイルと同じディレクトリにある場合は、コンパイルコマンドの「-Lllibzinnia」を「-llibzinnia」または「-lzinnia」に変えたら、どうなりますでしょうか?
dice1989

2021/05/02 21:57

ありがとうございます。 同じディレクトリにexampe.cpp zinnia.h libzinnia.dll libzinnia.lib handwriting-ja.modelがある状態でg++ -llibzinnia と -lzinnia を試してみたのですが cannnot find -llibzinnia(-lzinniaの場合も同様)となってしまいます。
jbpb0

2021/05/02 22:19

> cannnot find -llibzinnia コンパイルコマンドの「-l...」よりも前(左)に「-L./」も付けてみてください 参考 https://blog.katty.in/4350#toc4 の「main関数からライブラリを使う。」
dice1989

2021/05/02 22:26

お付き合いいただきありがとうございます。 g++ example.cpp -L./ -llibzinnia としました。 when searching for --llibzinniaと文字が複数回出てくるように変化しましたが、collect.exe:error:ld returned 1 exit statusとなっています。
dice1989

2021/05/02 22:31

pyinstaller test.py --onefile --add-bainary "python2.7が入っている場所/site-package/_zinnia.dll;この部分はどのディレクトリを指定したらいいのでしょうか(./で試したらno such option: --add-binaryというerrorが出ました)"
jbpb0

2021/05/02 22:42

https://cygwin.com/cygwin-ug-net/dll.html に書かれてるコンパイルコマンドも、そうなってるのですが、何でしょうね?? > collect.exe:error:ld returned 1 exit status 以外にエラー表示出てませんでしょうか?
dice1989

2021/05/02 22:51

C:/Program Files/mingw-w64/x86_64以降略/bin/ld.exe :skipping incompatible .//libzinnia.lib when searching for -llibazinniaといった表示がいくつも出ています。
jbpb0

2021/05/02 23:23 編集

> python2.7が入っている場所/site-package/_zinnia.dll;この部分はどのディレクトリを指定したらいいのでしょうか https://pg-chain.com/python-module-package-directory に書かれてる方法でインストールされてるパスを調べて、Windowsのエクスプローラーでそこを開いて、dllの正確なパスを調べてください dllが見つからなければ、一つ上のディレクトリとかも探してください
dice1989

2021/05/02 23:08

そもそもよくわかっていないことがありました。 python2 ではテスト用のzinniaプログラムは動くのですが python3 test.pyでは動きません。 zinniaをインストールpython setup.py build(install)するときも python2系でしかできなったのでpython3系では動かないということなのでしょうか。 初学者なので全然関係のないことを言っていたら申し訳ないです。
jbpb0

2021/05/02 23:44 編集

> C:/Program Files/mingw-w64/x86_64以降略/bin/ld.exe あれ? MinGWのldが使われてる もしかしたら、Pathの設定が間違っていて、cygwinのgcc(g++)が使われてないとか gcc -v を実行した結果の「Target:」欄に「cygwin」が付いてますか? 参考 https://qiita.com/shirry0129/items/626fc62e2cedb92eebb4
dice1989

2021/05/02 23:54

pythonで使っているのはそれです! gccとg++のターゲットはx86_64-pc-cygwinになっています。 この後出かけるので、返事が遅くなりますが、もしお付き合いいただければよろしくお願いいたします。 丁寧にありがとうございます。
jbpb0

2021/05/03 00:01

> pythonで使っているのはそれです! それはpython 2.7用ですので、python 3.*では使えません どこかに3.*用のもあるかもしれませんが
dice1989

2021/05/03 04:43

なるほど。 python2.7 python2-zinnia kivy pyinstaller これらを使ってスタンドアロンアプリを実現は可能なのでしょうか。
dice1989

2021/05/03 04:51

pyinstallerのバージョンを2.1にしてみたり・・・ 関係ないですかね
dice1989

2021/05/03 09:16

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

2021/05/05 05:16

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

回答1

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;

}

投稿2021/05/05 06:46

dice1989

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問