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

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

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

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

Q&A

解決済

2回答

2493閲覧

githubでDLしたC++プログラムの実行方法

退会済みユーザー

退会済みユーザー

総合スコア0

C++

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

0グッド

0クリップ

投稿2021/01/18 16:18

githubでFAsT-MatchというプログラムをDLしたのですが、
C++1つだけなら、実行方法は分かる(ソースを貼りつけ、出力)のですが、このようにいくつものファイル、フォルダからなる
プログラムの実行方法がわかりません、どうするのでしょうか。

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

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

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

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

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

hoshi-takanori

2021/01/18 20:41

試しに動かしてみましたが、私の非力なマシンではかなり時間がかかりました。 (image.png/template.png で 8 分、image2.png/template2.png で 40 分以上。) 動かす方法については、OS とコンパイラの種類とバージョンによります。 (というか、ソースを貼りつけって、もしかしてオンラインコンパイラで動かすつもりでしょうか?)
退会済みユーザー

退会済みユーザー

2021/01/19 02:04

Visual Studio2019で動かしたいのですが、どのようにすれば実行できるのでしょうか・・・ 複数のフォルダ、ファイルのセットを実行する方法が分からない、、 アプリみたいにexeファイルがあるわけでもないし。
退会済みユーザー

退会済みユーザー

2021/01/19 03:03

これってcvいるんですかね、いらないと思ってた。。 cv使わない、それだけで完結した、画像認識系のプログラムとかありませんかね、いじって勉強してみたいんですが。
hoshi-takanori

2021/01/19 10:51

何もライブラリを使わない場合、画像認識以前に、画像ファイルを開いたり、それを画面に表示するだけでもう大変ですよ。前の質問に、簡単な OpenCV のプログラム (画像を開いて表示するだけ) を貼っておきます。 https://teratail.com/questions/316483
退会済みユーザー

退会済みユーザー

2021/01/20 09:21

OpenCVを使った場合、OpenCVの内容はブラックボックス化してしまうので、 それは「理解」したことにならないため、避けたいということです。
退会済みユーザー

退会済みユーザー

2021/01/20 09:26

OpenCVはソース公開されているので、理解したいのであればソースを読めばいい話なのでは。
退会済みユーザー

退会済みユーザー

2021/01/20 14:06

OpenCVのプログラム中で、比較的いじやすい部分ってどこなんでしょうか・・・。 部分的に数値を変えてみて、で、一応使用経験はあるので、変更した状態で使用してみて、変化を見る、 みたいなことをやってみたいなぁと・・・。
hoshi-takanori

2021/01/20 15:52

ものごとには順番というものがありまして…。 OpenCV の中身を理解したいという気持ちはとても大事なんですが、そのためにはまず OpenCV を普通に使えるようになる必要があると思います。
退会済みユーザー

退会済みユーザー

2021/01/20 18:35

一応createsampleして、もしくはせずに、オリジナルok,ng画像でカスケード分類して、sample画像の適当部分を赤長方形で囲む事はできました。 それ以外の機能は使っていませんが、とりあえず使用はできたので、 プログラムをいじってみたいなと。 opencvの中で、比較的いじりやすく、そして実行結果に反映される部分を、 いじって、反映させ、結果を見たりしたいのですが。
guest

回答2

0

当該プロジェクトは
https://github.com/subokita/FAsT-Match
Licenseが明示されていないためそもそも著作権上利用することはできません。

一般論として複数の翻訳単位があるとき、Makefileを書いたりCMakeを書いたり、はたまた特定の統合開発環境でのみ解釈できるプロジェクトを作成したりすると思います。今回はXCodeのプロジェクトのようですが。


追記

著作権法第30条の定める私的複製の範囲に収まればDLしてビルドすることはできますね、訂正します。


追記

まずはC++そのもの、そしてCMakeを勉強しましょう。基礎体力にあたるような部分が欠如しています。
C++講座 | Theolizer®

投稿2021/01/18 16:27

編集2021/01/21 09:31
yumetodo

総合スコア5852

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

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

yumetodo

2021/01/18 16:37

forkはできますが、それ以外の点でAll rights reservedですからDLすらできないと解釈しています
hoshi-takanori

2021/01/18 16:39

「これは、他者が管理するリポジトリ内のお客様のリポジトリから他者が「コンテンツ」の独自の複製を作成できることを意味します」とありますが。
yumetodo

2021/01/18 16:43

それはGithubというサービスを通じて、という制約の範囲かと。 それはそうと著作権法第30条の定める私的複製を忘れていた。
退会済みユーザー

退会済みユーザー

2021/01/18 17:25

当てはまれば、というか、GitHubってオープンソースだから自由に使えるわけではないんですか?
hoshi-takanori

2021/01/18 18:35

著作権法第30条の「私的使用」および GitHub での「フォーク」に関しては問題ありませんが、それを超える場合はライセンス表記がないので著作権者の許諾が必要になります。詳しくは法律の専門家にご相談ください。
yumetodo

2021/01/19 01:20

「Githubにソースコードがある」と「そのコードがOSSである」は等価ではありません
yumetodo

2021/01/19 01:25

repoのメンテナが活動してるならIssueを立ててLicenseなに?と聞くこともできるのですが、どうも作者さん活動してらっしゃらないようなので。 ちなみにそれの元になった http://www.eng.tau.ac.il/~simonk/FastMatch/ のREADMEには > Enjoy! (at your own risk...) と書いてありますね。これを使用許諾とみなすかどうか。
退会済みユーザー

退会済みユーザー

2021/01/19 02:04

とりあえずDLはできたので、私的に自分のPCで動かしてみたいのですが、 Visual Studio2019で動かしたいのですが、どのようにすれば実行できるのでしょうか・・・ 複数のフォルダ、ファイルのセットを実行する方法が分からない、、 アプリみたいにexeファイルがあるわけでもないし。
yumetodo

2021/01/19 02:11

基本的にはプロジェクトにソースファイル全部追加すればビルドできると思いますが・・・。
退会済みユーザー

退会済みユーザー

2021/01/19 03:01

ビルドってどの画面のときにどのコマンドを押せば良いんでしょうか。
yumetodo

2021/01/19 03:04

あー、これopencvに依存してるのか。 https://github.com/microsoft/vcpkg つかってOpenCV入れてきてください。 > ビルドってどの画面のときにどのコマンドを押せば良いんでしょうか。 さすがにそれはググってください。
退会済みユーザー

退会済みユーザー

2021/01/19 03:38

cvいるみたいなんですよね。 cvいらない、完結した、比較的簡単な画像認識系プログラムとか、githubにありませんかね?
yumetodo

2021/01/19 03:49 編集

vcpkg使えばopencvつかうのはほぼ何も考えないでいいので諦めて使ってください。大抵の画像処理はopencvに依存するのが主流です。 ちなみにtbbとqtにも依存しているようですがvcpkgの場合は勝手にいれてくれそうですね。
yumetodo

2021/01/19 04:09 編集

最新のOpenCVで使うにはいくつか手直しが必要だったりしたのでパッチ作りました https://github.com/subokita/FAsT-Match/pull/5 ついでにCMakeでビルドできるようにしたので、普通にcmakeすればビルドできるようになりました。
退会済みユーザー

退会済みユーザー

2021/01/19 09:28

もっと基本的な事からやっていったほうがいいかなと思ったのですが、 cv使わない画像認識関係のプログラムないですかね、 最悪、画像関係であればいいかも・・・。
yumetodo

2021/01/19 10:16

いやぁ、opencv忌避したらなんもならんのではと。だれもそんなプログラム面倒くさくて書きたくないし。一定程度のビルド力は持って然るべきかと。vcpkg使えばコマンド一つで入りますし。
kaina

2021/01/19 11:41

まず画像処理以前にC++の基礎が出来ていないように見受けられます。 C++の教本でも買って、基礎学習をしてから画像処理を学ぶようにするべきです。
tiitoi

2021/01/19 12:01 編集

質問者さんがやるべきことはまず C++ の勉強をするところからでは? ビルド方法もわからないのに、いきなりやりたいことに手を出そうとするのに無理があります。 OpenCV を使わないプログラムのほうが簡単だと考えているのかもしれませんが、使わないと画像読み込みも自前で書くか、 libjpeg、libpng のような低レイヤーのライブラリを使わないといけないので、OpenCV 使うより何倍も難易度があがりますよ
退会済みユーザー

退会済みユーザー

2021/01/20 08:45

『「何か」を利用する』ということは、『「何か」を理解していない』ことになるので避けたいです。
yumetodo

2021/01/20 09:15

それが抽象化というものです。理解しないことを忌避しないでください。まず動いて、それから考える。
退会済みユーザー

退会済みユーザー

2021/01/20 09:16

とりあえず利用してみて、自己流のものを作りたくなったらその部分を置き換えればよいかと思いますが。
退会済みユーザー

退会済みユーザー

2021/01/20 09:22

しかしCVとなってくると、プログラムが大きすぎて、 どこを置き換えればよいのかわからない・・・。
退会済みユーザー

退会済みユーザー

2021/01/20 09:31

いきなり全てを知ろうというのが土台無理な話です。理解してないから使いたくないとなると、C、C++の標準ライブラリも使えなくなりますよ。
yumetodo

2021/01/20 10:05 編集

正しい抽象化とは、下のレイヤーをさほど意識せずとも利用できるものです。もし下のレイヤーを意識しなければならないとしたらそれは抽象化に失敗しているといえます。OpenCVは十分によく設計されていて適切に抽象化されていますから、それより下のレイヤーについて考えることは必要ないわけです。OpenCVのリファレンスやサンプルを見ることで十分によく理解できることでしょう。 https://docs.opencv.org/4.5.1/ まずは目的とする動作を達成する、そこが最優先です。理解しないことを忌避しないでください。
退会済みユーザー

退会済みユーザー

2021/01/20 11:04

下のレイヤーってなんですかね、プログラムの核となる、あまりいじらなくてよい部分みたいなことですか? そのURLよく紹介してもらいますが、英語ですがそこに詳しい部分部分のファイルの説明がのってるんですかね? CVのうち、簡単な部分をいじりたい、どこをいじればよいのか・・・
yumetodo

2021/01/20 16:49 編集

抽象化におけるレイヤーなので、やろうとしていることに対して注意を払わなくていい部分、というほうが正確だろうか。 > そのURLよく紹介してもらいますが、英語ですがそこに詳しい部分部分のファイルの説明がのってるんですかね? そのページの検索枠に関数・クラス名入れたらその説明と、あればサンプルコードへのリンクも出てきますね。 とりあえず初歩の初歩で大津のアルゴリズムによる二値化とかやってみたらどうですかね。OpenCVなら20行くらいでかけるはず。 何にしてももともとの質問については十分に解答したはずなのでこれ以上は質問を閉じて、自分で試して、自分で調べて、それでもわからなかったら質問してください。
退会済みユーザー

退会済みユーザー

2021/01/20 18:43

質問を新たに立てようかなとはよく思いますが、立てるとと乱立する事になってしまうので、一応答えて頂けるなら質問しようかなと思っております。 CreteSampleを使うと、1枚のok画像を微妙に変化(回転したり、点描したり、部分的に画素を 変えたりしていると思われる)させて1000枚ぐらい、Vecファイルとして作成できるのですが、 自分は20枚ぐらいの拾ってきた画像を元に、CreateSampleして、合計20×1000=2万枚ぐらい 作成できるようにしたいのですが、 自分の調べた限りでは、CreateSampleは1枚の画像に対してしか使えないようです、 これを、プログラムをいじる事で、20枚の画像についてCreateSampleしてVecファイルにするか、 20回に分けてCreateSampleして作成したVecファイル20個を結合して1つのVecファイルにする 関数を作ったりしたいのですが、これは難しいでしょうか、 いずれにせよ、精度が上がるようないじり方をしたい、現時点ではサンプルのok画像が少ない事も あるが、使い物にならない、サンプルのok画像すら認識ミスを割としてしまう。
tiitoi

2021/01/21 01:41

20枚の画像に適用するときに CreateSample を1回ずつ呼び出すのが面倒ってことであれば、CreateSample を改造するのではなく、「ファイルパス一覧取得して、各ファイルに対して CreateSample を呼び出していく」というスクリプトをPowerShellあたりで作ればいいのではないでしょうか?
退会済みユーザー

退会済みユーザー

2021/01/21 01:44

いや、vecファイルをいくつも作っても、それを結合できないと意味がないのです。
yumetodo

2021/01/21 06:35

それは論文読んできてくださいとしか。私達回答者としてはそこまでするモチベーションがないので。
guest

0

ベストアンサー

まず問題の分類から始めましょう。

  1. C++ プロジェクトのビルド方法がわからない
  2. OpenCV の書き換え方がわからない
  3. OpenCV を使うと画像処理の原理がわからなくなりそう
  4. サンプル画像が足りない

答え:

  1. C++ プロジェクトのビルドは難しいです。あきらめましょう。Python から OpenCV を使いましょう
    1. がわからないとわかりません。あきらめましょう。Python から OpenCV を使いましょう
  2. そんなことはありません。日本語をしゃべるのに品詞がどうたらこうたらという知識が必要ありますか?あきらめましょう。Python から OpenCV を使いましょう
  3. これに関しては調べたところ悩ましい問題でしたが、OpenCV の vec ファイルを結合する試みがあるようです。

OpenCV - traincascadeを用いた検出器 vecファイルの合成|teratail
別にソースコードをいじらなくてもこういう工夫が転がっていたりするのです。検索して徹底的に調べてみてください

投稿2021/01/20 19:57

A_kirisaki

総合スコア2853

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

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

退会済みユーザー

退会済みユーザー

2021/01/20 21:00

ほう、コマンドプロンプトにコマンドを入れるとできるとか?今度やってみます。 1がよく分からないのですが、ビルドって何が難しいんですか? C++コード、1ファイル分を実行することは、簡単にできたのですが、 複数ファイル、フォルダの集合体に対してそれを行うものがビルドだと思うのですが、 それの何が難しいのか、まぁできてないんですけど。 CVとかはpythonから実行できるというより、実行するものですよね?
A_kirisaki

2021/01/20 21:21

ビルドするのは環境を整えるのが一番大変です。特に Windows ですと cmake というツールが正しく動作するかあやしいので、設定がより困難になってきます。UNIX 系であれば ccmake というツールで楽にビルドできるのですが。詳しくはここで見比べていただくとわかるかと思います。 https://docs.opencv.org/master/df/d65/tutorial_table_of_content_introduction.html > CVとかはpythonから実行できるというより、実行するものですよね? 仰る意味が掴みかねないのですが……。
退会済みユーザー

退会済みユーザー

2021/01/20 21:42

pythonで実行できるので、ビルドって何をすることなのかなと。 exeファイルとかを作成することを言うんですかね。
yumetodo

2021/01/21 06:34

(ところでWindows環境のようなので、PythonからOpenCVとかそこかしこに地雷埋まっててとてもじゃないけどおすすめできない、高度なビルド力とデバッグ力を身に着けてからじゃないとあのへんのエラーにハマった時抜け出せない)
yumetodo

2021/01/21 06:37

> 特に Windows ですと cmake というツールが正しく動作するかあやしいので、設定がより困難になってきます。 御冗談でしょう。きちんと動作しますし、cmake-guiを使うという手もあるし、ccmakeも動きます。
A_kirisaki

2021/01/21 08:39

> naganuma さん ビルドというのはソースコード群をコンパイルしてリンクして実行ファイルや DLL にする一連の流れを言います。対して Python はビルドする必要がないインタープリター言語です。環境構築は総じて後者が楽です。OpenCV はC++ で書かれていますがこれをDLL にすることで Python から呼び出せるようになったりもします。あと思ったのですが Windows よりも Linux で Python + OpenCV の組み合わせを使ったほうがお手軽な気がします。yumetodo さんいわく Windows だと罠が多いらしいので。 > yumetodo さん これは失礼。知識不足でした。ただ質問者さんを見てると C++ を直接というのもとても……。「Linux で」という枕詞つけると良いんでしょうかね。
退会済みユーザー

退会済みユーザー

2021/01/22 07:53 編集

書き込み主さんが詳細リンクを出してくれた4の方法、 python mergevec.py -v 結合するvecファイルを詰め込んだフォルダ名 -o 出力vecファイル名 を実行する事で、見事に、10種類の異なる画像を元に、各1000種類の画像をCreateして、 その10000種類の画像を元にしてvecファイルを作る(結合)事ができました、 このok結合vecファイルとng画像39枚を用いてsample画像にカスケード分類を行った所、、、今度は何でもかんでも正解画像として囲ってしまいました(大小の□が100個程) ngファイルが少ないという事ですかね?しかしngファイルを増やしても精度の向上はあまり見られないように感じられるのですが・・・。 という事で、 1.createsampleで、どのようにしてsampleを大量生産しているのか?プログラムの探り方 3.ng画像を大量生産する方法、またその効果(nf画像にcreatesampleを使って良いのか?効果はあるのか?) 3.上に挙げた以外でカスケード分類の精度を更に向上させる別の方法 等を考えていますが、何か案はありませんかね。 を知りたいのですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問