FC2カウンター FPGAの部屋
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Ultra96-V2 でカメラ画像をDisplayPort に出力する1(ブロックデザイン)

Ultra96-V2 のDisplayPort にテストパターンを表示する4(テストパターンを表示できた)”でUltra96-V2 でDisplayPort にテストパターンを表示することができた。今回は、Ultra96-V2 でカメラ画像をDisplayPort に出力してみようと思う。

カメラ画像をDisplayPortに出力する7(ブロックデザインの変更)”の cam_dp_183 の Vivado 2018.3 プロジェクトがあるので、ディレクトリごと Ultra96V2 ディレクトリにコピーして、ディレクトリの名前を cam_dp_V2_183 に変更した。
cam_dp_V2_1_190817.png

Vivado 2018.3 で ~/HDL/Ultra96/Ultra96V2/cam_dp_V2_183/ ディレクトリの cam_dp_183 プロジェクトを開いた。
cam_dp_V2_2_190817.png

今回は、ひでみさんの「FPGAの内容が薄い本2」に書かれているが、Ultra96V1 とUltra96V2 の設定の違いを使用して、Ultra96V1 用のプロジェクトをUltra96-V2 用に変換してみよう。

ブロックデザインのZYNQ UltraScale+ IP をダブルクリックして、設定を開き、Page Navigator から DDR Configuration を開く。
cam_dp_V2_3_190817.png

DDR Configuration 画面で、
DRAM Device Capacity (per 32-bit channel) を 16384 MBits
Row Address Count (Bits) を 16
Dual Rank のチェックボックスをのチェックを無し
に変更した。
cam_dp_V2_4_190817.png

Address Editor を示す。
cam_dp_V2_6_190817.png

変更後に論理合成、インプリメンテーション、ビットストリームの生成を行った。
うまく行ったようだ。結果を示す。
cam_dp_V2_5_190817.png
  1. 2019年08月17日 05:32 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

sudo: unable to resolve host の表示を止める

現在、Ultra96-V2 の ikwzm さんのDebian を使用して、 sudo コマンドを使用すると”sudo: unable to resolve host debian-fpga: Name or service not known”が表示されてしまう。
DisplayPort_test_V2_46_190816.png

ある方に解決方法を教えていただいたのだが、忘れてしまったため、Web を検索してやってみた。忘れないようにブログに書いておく。
sudo: unable to resolve host が表示されたら”を参照させていただきながらやっていく。

まずは、/etc/hosts を確認する。

127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters


/etc/hosts にホスト名を追加する。
sudo sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'

もう一度、/etc/hosts を見ると、ホスト名が追加されていた。

127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

127.0.1.1 debian-fpga


これで、sudo コマンドを実行しても”sudo: unable to resolve host debian-fpga: Name or service not known”が表示されなくなった。感謝。。。
DisplayPort_test_V2_47_190816.png
  1. 2019年08月16日 04:47 |
  2. Linux
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 のDisplayPort にテストパターンを表示する4(テストパターンを表示できた)

Ultra96-V2 のDisplayPort にテストパターンを表示する3(各種スクリプト・ファイルやDTS ファイルの用意)”の続き。

前回は、各種スクリプト・ファイルやDTS ファイルを用意し、DTS ファイルをコンパイルしてDTB ファイルに変換した。今回は、つまずきはあったが、テストパターンをDisplayPort に出力することができた。

最初に、pattarn_gen_axis.c を gcc でコンパイルした。
gcc -o pattern_gen_axis pattern_gen_axis.c
次に、displayport_test_xga1_sync.bin を /lib/firmware/ ディレクトリにコピーした。
sudo cp displayport_test_xga1_sync.bin /lib/firmware/
DisplayPort_test_V2_35_190815.png

./lddtovray.sh
を実行したところエラーが発生した。
lddtovray.sh のコマンドを1個ずつ実行していったところ、fclkcfg でエラーが出ているのが分かった。
fclkcfg の DTS ファイルを下に示す。
DisplayPort_test_V2_27_190814.png

だが、ikwzm さんの”ZynqMP 向け Debian/Linux(v2019.1版) でFPGA クロックの周波数の変更に失敗する件”を見ると、fclkcfg の DTS ファイルの書き方が違っている。ikwzm さんがツィッターで教えていただいたのだが、

大元のデバイスツリーのクロックコントローラーのラベル(シンボル)が v2018.2 では &clk だったのが v2019.1 から &zynqmp_clk に変更されちゃいました。

だそうだ。
という訳で、fclk0-zynqmp.dts を書き換えた。

/dts-v1/;/plugin/;
/ {
    fragment@0 {
        target-path = "/amba_pl@0";
        __overlay__ {
            fclk0 {
                compatible    = "ikwzm,fclkcfg-0.10.a";
                clocks        = <&zynqmp_clk 0x47 &zynqmp_clk 0>;
                insert-rate   = "100000000";
                insert-enable = <1>;
                remove-rate   = "1000000";
                remove-enable = <0>;
            };
        };
    };
};


DisplayPort_test_V2_37_190815.png

./dtc_script.sh
コンパイルしてから、fclkcfg のデバイスツリーをロードしたところ、問題なくロードできた。
下の図に示す。ピンクで囲ったところが、fclkcfg のエラー部分だ。
DisplayPort_test_V2_36_190815.png

DisplayPort_test_V2_38_190815.png

/sys/class/fclk0/ ディレクトリが生成されている。
DisplayPort_test_V2_39_190815.png

uio のデバイスツリーのロードを行った。
sudo mkdir /config/device-tree/overlays/pattern_gen_axis
sudo cp pattern_gen_axis.dtb /config/device-tree/overlays/pattern_gen_axis/dtbo


同様に、/sys/classe/ を見ると、uio0 〜 uio4 があったが、その内の uio4 の name が pattern_gen_axis-uio だった。
DisplayPort_test_V2_40_190815.png

ということは、pattern_gen_axis の uio 番号が違っているので、pattern_gen_axis.c を変更した。
DisplayPort_test_V2_41_190815.png

// pattern_gen_axis.c
// 2019/01/18 by marsee
// 2019/08/15 : Changed to /dev/uio4 for Ultra96-V2. by marsee
//

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>

int main(){
    int fd4;
    volatile unsigned *pga;
    int i;

    // uio initialize (uio1)
    fd4 = open("/dev/uio4", O_RDWR|O_SYNC); // pattern_gen_axis IP
    if (fd4 < 1){
        fprintf(stderr, "/dev/uio4 (pattern_gen_axis) open error\n");
        exit(1);
    }
    pga = (volatile unsigned *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd4, 0);
    if (!pga){
        fprintf(stderr, "pattern_gen_axis mmap error\n");
        exit(1);
    }

    pga[4] = 768; // v_size
    pga[6] = 1024; // h_size
    pga[8] = 0x1; // init_done = 1
    
    printf("sizeof volatile unsigned = %d\n", sizeof(volatile unsigned));
    
    printf("v_size = %d, h_size = %d, init_done = %d\n", pga[4], pga[6], pga[8]);
    
    munmap((void *)pga, 0x10000);
    close(fd4);
    
    return(0);
}


もう一度、gcc でコンパイルした。
gcc -o pattern_gen_axis pattern_gen_axis.c
pattern_gen_axis を sudo で実行した。
sudo ./pattern_gen_axis
DisplayPort の設定を行った。
./disp_pattern.sh
DisplayPort_test_V2_42_190815.png

しかし、memwrite が無かった。
Ultra96のDisplayPortを使用するためのテスト3(実機テスト)”から memwrite.c にコードを持ってきた。
DisplayPort_test_V2_43_190815.png

gcc -o memwrite memwrite.c
でコンパイルし、実行したところ、DisplayPort にテストパターンが表示された。良かった。。。
DisplayPort_test_V2_44_190815.png

DisplayPort_test_V2_45_190816.jpg
  1. 2019年08月16日 04:29 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 のDisplayPort にテストパターンを表示する3(各種スクリプト・ファイルやDTS ファイルの用意)

Ultra96-V2 のDisplayPort にテストパターンを表示する2(binファイルの作成)”の続き。

前回は、Ultra96-V2 のボード・ファイルを使用して、Ultra96-V2 のDisplayPort にテストパターンを表示するためのブロックデザインを論理合成、インプリメンテーション、ビットストリームの生成を行って、bin ファイルを作成した。今回は、各種スクリプト・ファイルやDTS ファイルを用意し、DTS ファイルをコンパイルしてDTB ファイルに変換した。

最初に、Ultra96-V2 の/home/fpga/ ディレクトリに examples/displayport_test_xga1_sync_V2/ ディレクトリを作成した。
DisplayPort_test_V2_21_190814.png

displayport_test_xga1_sync.bin をUltra96-V2 の/home/fpga/examples/displayport_test_xga1_sync_V2/ ディレクトリにSFTP でコピーした。
DisplayPort_test_V2_22_190814.png

Ultra96のDisplayPortを使用するためのプロジェクトを作成する2(表示失敗)”を参考にして、各種スクリプトとDTS ファイルを準備する。なお、”Ultra96のDisplayPortを使用するためのプロジェクトを作成する2(表示失敗)”に書かれている各種スクリプトとDTS ファイルのコードはここに書かないので、参照先を参考にして欲しい。

lddtovray.sh と rmdtovray.sh を用意した。
DisplayPort_test_V2_23_190814.png

DisplayPort_test_V2_24_190814.png

fpga-load.dts 、fclk0-zynqmp.dts 、pattern_gen_axis.dts を用意した。
DisplayPort_test_V2_25_190814.png

DisplayPort_test_V2_27_190814.png

DisplayPort_test_V2_28_190814.png

pattern_gen_axis.c を用意した。
DisplayPort_test_V2_29_190814.png

disp_pattern.sh を用意した。
DisplayPort_test_V2_30_190814.png

DTS をコンパイルするための dtc_script.sh を用意した。
DisplayPort_test_V2_31_190814.png

#!/bin/bash

dtc -I dts -O dtb -o fpga-load.dtb fpga-load.dts
dtc -I dts -O dtb -o fclk0-zynqmp.dtb fclk0-zynqmp.dts
dtc -I dts -O dtb -o pattern_gen_axis.dtb pattern_gen_axis.dts



現在の /examples/displayport_test_xga1_sync_V2/ ディレクトリの内容を示す。
DisplayPort_test_V2_32_190814.png

DTS ファイルをコンパイルするために device-tree-compiler をインストールする。
sudo apt-get install device-tree-compiler
DisplayPort_test_V2_33_190814.png

./dtc_script.sh
コマンドで、 DTS ファイルをコンパイルして、DTB ファイルが出力された。
DisplayPort_test_V2_34_190814.png
  1. 2019年08月14日 14:02 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 のDisplayPort にテストパターンを表示する2(binファイルの作成)

Ultra96-V2 のDisplayPort にテストパターンを表示する1(プロジェクトの作成)”の続き。

前回は、Ultra96-V2 のボード・ファイルを使用して、Ultra96-V2 のDisplayPort にテストパターンを表示するためのブロックデザインを作成した。今回は、それを論理合成、インプリメンテーション、ビットストリームの生成を行って、bin ファイルを作成する。

ブロックデザインが完成したので、HDL wrapper file を作成し、displayport_test.xdc の制約ファイルを”Ultra96のDisplayPortを使用するためのプロジェクトを作成する1(DisplayPort_test_XGA1_sync)”のプロジェクトからコピーした。
DisplayPort_test_V2_15_190812.png

論理合成、インプリメンテーション、ビットストリームの生成を行った。Project Summary を示す。
DisplayPort_test_V2_16_190813.png

成功したので、ハードウェアをエクスポートして、SDK を起動した。
DisplayPort_test_V2_17_190813.png

これで、 .sdk ディレクトリが生成された。
displayport_test_wrapper_hw_platform_0 ディレクトリから displayport_test_wrapper.bit をDisplayPort_test_XGA1_sync_V2.sdk ディレクトリにコピーした。
Ultra96のDisplayPortを使用するためのプロジェクトを作成する1(DisplayPort_test_XGA1_sync)”のプロジェクトからdisplayport_test_wrapper.bif と bootgen.sh をコピーした。
DisplayPort_test_V2_18_190813.png

./bootgen.sh
を実行すると、displayport_test_xga1_sync.bin が生成された。
DisplayPort_test_V2_19_190813.png

DisplayPort_test_V2_20_190813.png
  1. 2019年08月13日 09:44 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

Ultra96-V2 のDisplayPort にテストパターンを表示する1(プロジェクトの作成)

Ultra96-V2 のDisplayPort にテストパターンを表示してみようということで、”Ultra96のDisplayPortを使用するためのプロジェクトを作成する1(DisplayPort_test_XGA1_sync)”を参照して Vivado 2018.3 の DisplayPort_test_XGA1_sync_V2 プロジェクトを作成した。

Vivado 2018.3 を立ち上げて DisplayPort_test_XGA1_sync_V2 プロジェクトを作成した。途中のダイアログの設定を示す。
まずは、プロジェクトのロケーションとプロジェクト名を示す。
DisplayPort_test_V2_1_190812.png

Ultra96V2 のボード・ファイルを適用する。
DisplayPort_test_V2_2_190812.png

サーマリ。
DisplayPort_test_V2_3_190812.png

DisplayPort_test_XGA1_sync_V2 プロジェクトが作成された。
DisplayPort_test_V2_4_190812.png

Ultra96のDisplayPortを使用するためのプロジェクトを作成する1(DisplayPort_test_XGA1_sync)”のプロジェクトから axi2video_out_IP と pattern_gen_axis_IP をコピーした。
DisplayPort_test_V2_5_190812.png

Zynq UltraScale+ MPSoC をAdd IP した。
DisplayPort_test_V2_6_190812.png

Run Block Automation をクリックした。
表示されたダイアログをデフォルトのまま、OK ボタンをクリックした。PS に設定が入力される。
DisplayPort_test_V2_7_190812.png

Ultra96V2 の設定が反映された。
DisplayPort_test_V2_8_190812.png

Zynq UltraScale+ MPSoC をダブルクリックして設定を行う。
PS-PL Configuration で Live Video を 1 にして、AXI_HPM1FPD のチェックを外した。
DisplayPort_test_V2_9_190812.png

次にDDR Configuration だが、”Ultra96のDisplayPortを使用するためのプロジェクトを作成する1(DisplayPort_test_XGA1_sync)”のDDR Configuration を示す。つまり、Ultra96V1 のDDR の設定だ。
DisplayPort_test_V2_10_190812.png

次に、新しいUltra96V2 にDDR Configuration の設定を示す。ひでみさんの「FPGAの内容が薄い本2」に書かれているが、Ultra96V1 とUltra96V2 の設定の違いを示す。

項目                    Ultra96V1   Ultra96V2
DRAM Device Capacity(per 32-bit channel)  8192 MBits 16384 MBits
Row Address Count(Bits)           15      16
Dual Rank                  チェック  チェック無し


DisplayPort_test_V2_11_190812.png

Clock Configuration では、PL0 を 220 MHz に設定した。
DisplayPort_test_V2_12_190812.png

Zynq UltraScale+ MPSoC はこうなった。
DisplayPort_test_V2_13_190812.png

axi2video_out_IP と pattern_gen_axis_IP をAdd IP して配線した。
DisplayPort_test_V2_14_190812.png

これでブロックデザイン完成。
Address Editor を示す。
DisplayPort_test_V2_26_190814.png
  1. 2019年08月12日 10:18 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0

Ultra96 のDebianにインストールしたOpenCVのC++サンプルデザインをコンパイル

Ultra96-V2 に ikwzm/ZynqMP-FPGA-Linux をインストール4(OpenCV 4.1.0 のインストール)”の続き。

OpenCV 4.1.0 のC++ のサンプルデザインをコンパイルしてみようとしたが、結局うまく行かなかった。よって、以前、”Ultra96 のDebianにインストールしたOpenCV-3.4.3のC++サンプルデザインをコンパイル”でやったように、OpenCV 3.4.3 をインストールして、OpenCV 3.4.3 のC++ のサンプルデザインをコンパイルした。

、”Ultra96 のDebianにインストールしたOpenCV-3.4.3のC++サンプルデザインをコンパイル”を参考にして、ホーム・ディレクトリの直下に bin ディレクトリを作成した。
Ultra96V2_80_190810.png

bin ディレクトリの下に、g++_opencv ファイルを作成した。
Ultra96V2_81_190810.png

#!/bin/sh

if [ $# -eq 1 ] ; then
    g++ -ggdb `pkg-config --cflags opencv` -o `basename $1 .cpp` $1 `pkg-config --libs opencv`;
else
    echo "g++_opencv < C++ file name >"
fi


Ultra96V2_82_190810.png

g++_opencv ファイルのプロバティを Allow executing file as program に変更した。
Ultra96V2_83_190810.png

.bashrc に export PATH=$PATH:~/bin を追加した。
Ultra96V2_84_190810.png

opencv-4.1.0/samples/cpp に行って、
g++_opencv facedetect.cpp
を実行した。
Ultra96V2_85_190810.png

そうするとエラーが発生した。
Ultra96V2_86_190810.png

いろいろと検索してみて、試したのだが、どうしてもコンパイルできなかった。
仕方ないので、以前インストールした、OpenCV 3.4.3 をインストールした。インストール方法は、OpenCV 4.1.0 と同じだ。ただ、3.4.3.zip をダウンロードするところが違うだけだ。
Ultra96V2_91_190811.png

今度は、opencv-3.4.3/samples/cpp/ ディレクトリに行って、
g++_opencv facedetect.cpp
を行うと、成功した。
./facedetect ../data/lena.jpg
Ultra96V2_89_190811.png

Ultra96V2_90_190811.png

ちなみに 、OpenCV 3.4.3 をインストールした状態で、いろいろとOpenCV 4.1.0 の facedetect サンプル・デザインのコンパイルを試してみた。
OpenCV4.0をソースコードからインストールする”を参考に
g++ facedetect.cpp -o facedetect -I/usr/local/include/opencv4/ -L/usr/local/lib64/ -lopencv_core
をやってみたがエラーだった。エラー内容を示す。

fpga@debian-fpga:~/opencv-4.1.0/samples/cpp$ g++ facedetect.cpp -o facedetect -I/usr/local/include/opencv4/ -L/usr/local/lib64/ -lopencv_core
/usr/bin/ld: /tmp/ccZJ8MHe.o: in function `main':
facedetect.cpp:(.text+0xc8): undefined reference to `cv::VideoCapture::VideoCapture()'
/usr/bin/ld: facedetect.cpp:(.text+0xe8): undefined reference to `cv::CascadeClassifier::CascadeClassifier()'
/usr/bin/ld: facedetect.cpp:(.text+0xf0): undefined reference to `cv::CascadeClassifier::CascadeClassifier()'
/usr/bin/ld: facedetect.cpp:(.text+0x12c): undefined reference to `cv::CommandLineParser::CommandLineParser(int, char const* const*, std::__cxx11::basic_string, std::allocator > const&)'
/usr/bin/ld: facedetect.cpp:(.text+0x16c): undefined reference to `cv::CommandLineParser::has(std::__cxx11::basic_string, std::allocator > const&) const'
/usr/bin/ld: facedetect.cpp:(.text+0x2f4): undefined reference to `cv::CommandLineParser::has(std::__cxx11::basic_string, std::allocator > const&) const'
/usr/bin/ld: facedetect.cpp:(.text+0x3bc): undefined reference to `cv::CascadeClassifier::load(std::__cxx11::basic_string, std::allocator > const&)'
/usr/bin/ld: facedetect.cpp:(.text+0x41c): undefined reference to `cv::samples::findFile(std::__cxx11::basic_string, std::allocator > const&, bool, bool)'
/usr/bin/ld: facedetect.cpp:(.text+0x428): undefined reference to `cv::CascadeClassifier::load(std::__cxx11::basic_string, std::allocator > const&)'
/usr/bin/ld: facedetect.cpp:(.text+0x510): undefined reference to `cv::VideoCapture::open(int, int)'
/usr/bin/ld: facedetect.cpp:(.text+0x5b4): undefined reference to `cv::imread(std::__cxx11::basic_string, std::allocator > const&, int)'
/usr/bin/ld: facedetect.cpp:(.text+0x608): undefined reference to `cv::VideoCapture::open(std::__cxx11::basic_string, std::allocator > const&, int)'
/usr/bin/ld: facedetect.cpp:(.text+0x6a4): undefined reference to `cv::samples::findFile(std::__cxx11::basic_string, std::allocator > const&, bool, bool)'
/usr/bin/ld: facedetect.cpp:(.text+0x6b8): undefined reference to `cv::imread(std::__cxx11::basic_string, std::allocator > const&, int)'
/usr/bin/ld: facedetect.cpp:(.text+0x730): undefined reference to `cv::VideoCapture::isOpened() const'
/usr/bin/ld: facedetect.cpp:(.text+0x768): undefined reference to `cv::VideoCapture::operator>>(cv::Mat&)'
/usr/bin/ld: facedetect.cpp:(.text+0x76c): undefined reference to `cv::VideoCapture::operator>>(cv::Mat&)'
/usr/bin/ld: facedetect.cpp:(.text+0x7bc): undefined reference to `cv::waitKey(int)'
/usr/bin/ld: facedetect.cpp:(.text+0x88c): undefined reference to `cv::waitKey(int)'
/usr/bin/ld: facedetect.cpp:(.text+0x9b8): undefined reference to `cv::imread(std::__cxx11::basic_string, std::allocator > const&, int)'
/usr/bin/ld: facedetect.cpp:(.text+0xa18): undefined reference to `cv::waitKey(int)'
/usr/bin/ld: facedetect.cpp:(.text+0xaa8): undefined reference to `cv::CascadeClassifier::~CascadeClassifier()'
/usr/bin/ld: facedetect.cpp:(.text+0xab0): undefined reference to `cv::CascadeClassifier::~CascadeClassifier()'
/usr/bin/ld: facedetect.cpp:(.text+0xad0): undefined reference to `cv::VideoCapture::~VideoCapture()'
/usr/bin/ld: facedetect.cpp:(.text+0xc9c): undefined reference to `cv::CascadeClassifier::~CascadeClassifier()'
/usr/bin/ld: facedetect.cpp:(.text+0xcac): undefined reference to `cv::CascadeClassifier::~CascadeClassifier()'
/usr/bin/ld: facedetect.cpp:(.text+0xcd4): undefined reference to `cv::VideoCapture::~VideoCapture()'
/usr/bin/ld: /tmp/ccZJ8MHe.o: in function `detectAndDraw(cv::Mat&, cv::CascadeClassifier&, cv::CascadeClassifier&, double, bool)':
facedetect.cpp:(.text+0xf00): undefined reference to `cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)'
/usr/bin/ld: facedetect.cpp:(.text+0xf5c): undefined reference to `cv::resize(cv::_InputArray const&, cv::_OutputArray const&, cv::Size_, double, double, int)'
/usr/bin/ld: facedetect.cpp:(.text+0xf90): undefined reference to `cv::equalizeHist(cv::_InputArray const&, cv::_OutputArray const&)'
/usr/bin/ld: facedetect.cpp:(.text+0x1008): undefined reference to `cv::CascadeClassifier::detectMultiScale(cv::_InputArray const&, std::vector, std::allocator > >&, double, int, int, cv::Size_, cv::Size_)'
/usr/bin/ld: facedetect.cpp:(.text+0x10b0): undefined reference to `cv::CascadeClassifier::detectMultiScale(cv::_InputArray const&, std::vector, std::allocator > >&, double, int, int, cv::Size_, cv::Size_)'
/usr/bin/ld: facedetect.cpp:(.text+0x1318): undefined reference to `cv::circle(cv::_InputOutputArray const&, cv::Point_, int, cv::Scalar_ const&, int, int, int)'
/usr/bin/ld: facedetect.cpp:(.text+0x13e8): undefined reference to `cv::rectangle(cv::_InputOutputArray const&, cv::Point_, cv::Point_, cv::Scalar_ const&, int, int, int)'
/usr/bin/ld: facedetect.cpp:(.text+0x13f8): undefined reference to `cv::CascadeClassifier::empty() const'
/usr/bin/ld: facedetect.cpp:(.text+0x1490): undefined reference to `cv::CascadeClassifier::detectMultiScale(cv::_InputArray const&, std::vector, std::allocator > >&, double, int, int, cv::Size_, cv::Size_)'
/usr/bin/ld: facedetect.cpp:(.text+0x15a4): undefined reference to `cv::circle(cv::_InputOutputArray const&, cv::Point_, int, cv::Scalar_ const&, int, int, int)'
/usr/bin/ld: facedetect.cpp:(.text+0x1634): undefined reference to `cv::imshow(std::__cxx11::basic_string, std::allocator > const&, cv::_InputArray const&)'
/usr/bin/ld: /tmp/ccZJ8MHe.o: in function `cv::samples::findFileOrKeep(std::__cxx11::basic_string, std::allocator > const&, bool)':
facedetect.cpp:(.text._ZN2cv7samples14findFileOrKeepERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb[_ZN2cv7samples14findFileOrKeepERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb]+0x2c): undefined reference to `cv::samples::findFile(std::__cxx11::basic_string, std::allocator > const&, bool, bool)'
/usr/bin/ld: /tmp/ccZJ8MHe.o: in function `std::__cxx11::basic_string, std::allocator > cv::CommandLineParser::get, std::allocator > >(std::__cxx11::basic_string, std::allocator > const&, bool) const':
facedetect.cpp:(.text._ZNK2cv17CommandLineParser3getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET_RKS7_b[_ZNK2cv17CommandLineParser3getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEET_RKS7_b]+0x38): undefined reference to `cv::CommandLineParser::getByName(std::__cxx11::basic_string, std::allocator > const&, bool, cv::Param, void*) const'
/usr/bin/ld: /tmp/ccZJ8MHe.o: in function `double cv::CommandLineParser::get(std::__cxx11::basic_string, std::allocator > const&, bool) const':
facedetect.cpp:(.text._ZNK2cv17CommandLineParser3getIdEET_RKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb[_ZNK2cv17CommandLineParser3getIdEET_RKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEb]+0x30): undefined reference to `cv::CommandLineParser::getByName(std::__cxx11::basic_string, std::allocator > const&, bool, cv::Param, void*) const'
collect2: error: ld returned 1 exit status


OpenCV4.0 簡易マニュアル パターン認識演習”を参考に
g++ -std=c++11 `pkg-config opencv4 --cflags --libs` facedetect.cpp -o facedetect
をやってみたが、エラーだった。エラー内容を示す。

fpga@debian-fpga:~/opencv-4.1.0/samples/cpp$ g++ -std=c++11 `pkg-config opencv4 --cflags --libs` facedetect.cpp -o facedetect
Package opencv4 was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv4.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv4' found
facedetect.cpp: In function 'int main(int, const char**)':
facedetect.cpp:65:29: error: 'samples' has not been declared
     if (!nestedCascade.load(samples::findFileOrKeep(nestedCascadeName)))
                             ^~~~~~~
facedetect.cpp:67:23: error: 'samples' has not been declared
     if (!cascade.load(samples::findFile(cascadeName)))
                       ^~~~~~~
facedetect.cpp:84:24: error: 'samples' has not been declared
         image = imread(samples::findFileOrKeep(inputName), IMREAD_COLOR);
                        ^~~~~~~
facedetect.cpp:87:31: error: 'samples' has not been declared
             if (!capture.open(samples::findFileOrKeep(inputName)))
                               ^~~~~~~
facedetect.cpp:96:24: error: 'samples' has not been declared
         image = imread(samples::findFile("lena.jpg"), IMREAD_COLOR);
                        ^~~~~~~

  1. 2019年08月11日 14:40 |
  2. Ultra96
  3. | トラックバック:0
  4. | コメント:0
»