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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

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

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

解決済

5回答

1145閲覧

ラズパイ3bでOpencvを用いて顔認証を行う。

carnage0216

総合スコア194

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

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

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

1クリップ

投稿2018/04/30 18:47

編集2018/05/02 11:50

ラズパイ3bの環境

  • OS Raspbian64bit
  • ラズパイ用カメラモジュール
  • コンパイラ gcc(Mingw)
  • OpenCV 3.4.1(Mingw用にビルド済み)

<実行したいこと>
ラズパイ3bで顔認証を行いたいのですが、Mingwで既にビルドされたソースコードhttps://github.com/huihut/OpenCV-MinGW-Build/tree/OpenCV-3.4.1を使います。
ダウンロードしてみたところライブラリはなかったのですが、ラズパイのCPU(ARM)用にビルド前のソースコードをコンパイルしてラズパイのCPU用にライブラリを作れということでしょうか?

こちらがソースコードです。

#include "cv.h" #include "highgui.h" #define CONTROL_LED #ifdef CONTROL_LED #include <bcm2835.h> #endif // 未来カメラのメインプログラム int calcBrightness(CvRect* rect,IplImage* frame); int main() { int key; char str[32]; int brightness; #ifdef CONTROL_LED // BCM2835ライブラリの初期化 if(!bcm2835_init()){ printf("bcm2835_init failed\n"); return(-1); } // P1端子11番ピンを出力、LOW設定にする bcm2835_gpio_fsel(RPI_V2_GPIO_P1_11,BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_write(RPI_V2_GPIO_P1_11,LOW); #endif CvCapture *capture = 0; IplImage *frame = 0; CvHaarClassifierCascade* cvHCC = (CvHaarClassifierCascade*)cvLoad("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"); CvMemStorage* cvMStr = cvCreateMemStorage(0); CvSeq* face; CvFont font; // ウィンドウの作成とフルスクリーン表示設定 cvNamedWindow ("capture_window", 0); cvSetWindowProperty("capture_window",CV_WND_PROP_FULLSCREEN,CV_WINDOW_FULLSCREEN); // フォント構造体の初期化 cvInitFont(&font,CV_FONT_HERSHEY_PLAIN,1,1); // カメラからのビデオキャプチャを初期化 capture = cvCreateCameraCapture (0); // 取得するカメラ画像の幅と高さを設定(カメラにより指定できる値が異なります) cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_WIDTH, (double)160); cvSetCaptureProperty (capture, CV_CAP_PROP_FRAME_HEIGHT, (double)120); while (1) { // 1フレーム取り出す frame = cvQueryFrame (capture); // 画像中から検出対象の情報を取得 face = cvHaarDetectObjects(frame, cvHCC, cvMStr); #ifdef CONTROL_LED // 顔検出数がゼロならLED消灯、それ以外なら点灯の為にGPIOを制御する if(face->total == 0){ bcm2835_gpio_write(RPI_V2_GPIO_P1_11,LOW); } else { bcm2835_gpio_write(RPI_V2_GPIO_P1_11,HIGH); } #endif // 検出した個数分のループを回す for (int i = 0; i < face->total; i++) { CvRect* faceRect = (CvRect*)cvGetSeqElem(face, i); // 顔検出領域の輝度を取得 brightness = calcBrightness(faceRect,frame); sprintf(str,"B:%d",brightness); // 顔の位置に矩形、その下に輝度情報をテキスト表示する cvRectangle(frame, cvPoint(faceRect->x, faceRect->y), cvPoint(faceRect->x + faceRect->width, faceRect->y + faceRect->height), CV_RGB(255, 255 ,0), 2, CV_AA); cvPutText(frame,str,cvPoint(faceRect->x, faceRect->y + faceRect->height + 16), &font,CV_RGB(255,255,0)); } cvShowImage ("capture_window", frame); key = cvWaitKey (1); if (key == ' ') { break; } // ダミーでフレームを取得(遅延量を少なく出来るように調整) cvQueryFrame (capture); cvQueryFrame (capture); cvQueryFrame (capture); cvQueryFrame (capture); } cvReleaseMemStorage(&cvMStr); cvReleaseCapture (&capture); cvDestroyWindow("capture_window"); cvReleaseHaarClassifierCascade(&cvHCC); return 0; } // 指定した領域の輝度平均値を得る int calcBrightness(CvRect* rect,IplImage* frame) { int x; int y; unsigned char r,g,b,mono; unsigned long sum; sum = 0; // rectで指定された領域サイズでループを回す for(y=rect->y;y<(rect->y+rect->height);y++){ for(x=rect->x;x<(rect->x+rect->width);x++){ b = frame->imageData[frame->widthStep*y+x*3 ]; g = frame->imageData[frame->widthStep*y+x*3+1]; r = frame->imageData[frame->widthStep*y+x*3+2]; // モノクロのデータを算出 mono = (unsigned char)((float)r*0.30f + (float)g*0.59f + (float)b*0.11f); sum += mono; } } // 平均値を戻す return(sum / (rect->width*rect->height)); }

<疑問に思ったこと>
ラズパイでopencvのライブラリが得られたとして、なぜそのライブラリが正常に動くのでしょうか?
ビルドされる前のライブラリのソースコードがどのような出力をするかわからないと思います。その出力されたバイナリデータ(ライブラリ)がラズパイでコンパイルしただけで正常に動く実行ファイルが得られる理由がわかりません。
ラズパイの設計者がgccでopencvのライブラリを使う事を考慮して設計したため実行ファイルが正常に動くのでしょうか?

<編集>
今更ですが、この本を参考にしてラズパイでOpencvを使おうと考えていました。
http://www.kumikomi.net/interface/contents/201401.php
載せたソースコードはこの本のサポートページに載っていたものです。
どうやら#include <bcm2835.h>が関係しているようです。
ただ、このbcm2835がARMやライブラリにどのように働くかは中身を見てみないとわからないので調べてみます。

<編集2>
PCの方でもビルドしてみました。
PCの環境

  • Windows10 64bit
  • OPENCV3.2.0
  • VS2107

実行ファイルが得られたのですが、実行すると停止してしまいます。
必要なDLLはそろえたのですが実行は出来ませんでした。
ラズパイでないので少しプログラムを編集しました。
こちらがプログラムです。
プログラム自体はラズパイでビルドする予定のものなのでうまくいかなかったのかもしれません。
(ほかに原因があるように思えますが。)

#include <opencv/cv.h> #include <opencv/highgui.h> // 未来カメラのメインプログラム int calcBrightness(CvRect* rect, IplImage* frame); int main() { int key; char str[32]; int brightness; CvCapture *capture = 0; IplImage *frame = 0; CvHaarClassifierCascade* cvHCC = (CvHaarClassifierCascade*)cvLoad("/usr/share/opencv/haarcascades/haarcascade_frontalface_default.xml"); CvMemStorage* cvMStr = cvCreateMemStorage(0); CvSeq* face; CvFont font; // ウィンドウの作成とフルスクリーン表示設定 cvNamedWindow("capture_window", 0); cvSetWindowProperty("capture_window", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN); // フォント構造体の初期化 cvInitFont(&font, CV_FONT_HERSHEY_PLAIN, 1, 1); // カメラからのビデオキャプチャを初期化 capture = cvCreateCameraCapture(0); // 取得するカメラ画像の幅と高さを設定(カメラにより指定できる値が異なります) cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, (double)160); cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, (double)120); while (1) { // 1フレーム取り出す frame = cvQueryFrame(capture); // 画像中から検出対象の情報を取得 face = cvHaarDetectObjects(frame, cvHCC, cvMStr); // 検出した個数分のループを回す for (int i = 0; i < face->total; i++) { CvRect* faceRect = (CvRect*)cvGetSeqElem(face, i); // 顔検出領域の輝度を取得 brightness = calcBrightness(faceRect, frame); sprintf(str, "B:%d", brightness); // 顔の位置に矩形、その下に輝度情報をテキスト表示する cvRectangle(frame, cvPoint(faceRect->x, faceRect->y), cvPoint(faceRect->x + faceRect->width, faceRect->y + faceRect->height), CV_RGB(255, 255, 0), 2, CV_AA); cvPutText(frame, str, cvPoint(faceRect->x, faceRect->y + faceRect->height + 16), &font, CV_RGB(255, 255, 0)); } cvShowImage("capture_window", frame); key = cvWaitKey(1); if (key == ' ') { break; } // ダミーでフレームを取得(遅延量を少なく出来るように調整) cvQueryFrame(capture); cvQueryFrame(capture); cvQueryFrame(capture); cvQueryFrame(capture); } cvReleaseMemStorage(&cvMStr); cvReleaseCapture(&capture); cvDestroyWindow("capture_window"); cvReleaseHaarClassifierCascade(&cvHCC); return 0; } // 指定した領域の輝度平均値を得る int calcBrightness(CvRect* rect, IplImage* frame) { int x; int y; unsigned char r, g, b, mono; unsigned long sum; sum = 0; // rectで指定された領域サイズでループを回す for (y = rect->y; y<(rect->y + rect->height); y++) { for (x = rect->x; x<(rect->x + rect->width); x++) { b = frame->imageData[frame->widthStep*y + x * 3]; g = frame->imageData[frame->widthStep*y + x * 3 + 1]; r = frame->imageData[frame->widthStep*y + x * 3 + 2]; // モノクロのデータを算出 mono = (unsigned char)((float)r*0.30f + (float)g*0.59f + (float)b*0.11f); sum += mono; } } // 平均値を戻す return(sum / (rect->width*rect->height)); }

<編集3>
編集2で載せましたコードがなぜ正常に実行できないのかがわかりません。
depends.exeを利用して必要なDLLは揃えました。
基のソースコードがラズパイ用であるためでしょうか?

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

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

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

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

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

guest

回答5

0

carnage0216さん、

まずは、基本的なことから。

CPUの種類(命令セット)や、OS(お作法)の違いなどから、実行ファイルやライブラリ(dll, so, dylib)の形式が異なります。

たとえば、Windowsも、MacOSも、それぞれ同じIntel系CPUを使っていても、バイナリの形式が異なるので、相互に使用できません。また、linuxであっても、Intel系とARM系のプロセッサでは、CPUの命令コードが違うので、動きません。

細かいことを言うと、ARMであっても、いくつか種類があって、使用しているものにあったアーキテクチャを使わないといけません。
通常のRaspbianは、armhf というものです。

なので、github / huihut/OpenCV-MinGW-Build で配布されているのは、Windows(Intel)向けのライブラリ(DLL形式)であるので、ラズベリーパイでは動きません。

<疑問に思ったこと>
... その出力されたバイナリデータ(ライブラリ)が ...

とかかれてますが、ライブラリは、CPUの命令コードが入っているので、ただのデータではありません。
ライブラリも、CPUやOSの種類が大いに関係あり、使用環境に適したものを使用する必要があります。

ところで、

OS Raspbian64bit

とは、どのOSのことでしょうか?
https://www.raspberrypi.org/downloads/raspbian/ から、ダウンロードできる、Raspbianは、32bitのみだと思います。

標準のRaspbianデスクトップ環境(Debian Stretchベース)で、Raspbery Pi 3Bで、OpenCVを使用する方法ですが、
バージョンににこだわりがなければ、標準のレポジトリで、OpenCV 2.4系(libopencv-dev)がインストールできます。

3.4.1だと、自前でビルドするか、https://qiita.com/mt08/items/e8e8e728cf106ac83218 で記事を書いていますが、ビルド済みのものも使えます。
(簡単なテストしかしてないので、すべてのOpenCVの機能が動作するかわかりませんが、ラズパイのカメラで顔検出は動作しました。)

投稿2018/04/30 21:22

mt08

総合スコア1825

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

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

0

ベストアンサー

その出力されたバイナリデータ(ライブラリ)がラズパイでコンパイルしただけで正常に動く実行ファイルが得られる理由がわかりません。

それぞれが決められた規格に従って作られているからです。例えば、Linux(を含めたUnix系OS)では、POSIXという規格により、システムコールやライブラリー関数などが規定されています。そのため、POSIX準拠のプログラムを書き、POSIX準拠のコンパイラーでコンパイルすれば、POSIX準拠のOSで動かせるバイナリーが出力されます。

ラズパイの設計者がgccでopencvのライブラリを使う事を考慮して設計したため実行ファイルが正常に動くのでしょうか?

違います。Raspberry Piの設計者はLinuxが動くように設計します。そして、OpenCV開発者はPOSIX準拠のソースコードを書きます。広く普及している規格に合わせることは、途轍もないメリットをもたらします。
用途(目的)によって、準拠すべき規格を変える必要性にも考慮し、上位モデルではWindowsにも対応しているのだと思います。

投稿2018/05/01 01:42

編集2018/05/01 01:50
catsforepaw

総合スコア5938

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

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

carnage0216

2018/05/01 10:28

どうもありがとうございます。 今回参考にした本では、コンパイラはgccを使っていました。 Linuxが動くように作ったり、OpenCV開発者の方がPOSIX準拠のソースコードを書いてくださったり、インストールしたgccが(ラズパイ3bへの搭載を考慮した)ARMに対応していたため正常に動く実行ファイルが得られると解釈したのですが、合っていますでしょうか? 確認をお願いいたします。
catsforepaw

2018/05/01 11:08

認識としてはそんな感じで合ってます。厳密には、件のgccはおそらく特別Raspberry Pi 3向けにビルドされたわけではなく、ARM版Linux向けのコードを出力するためのオプションでビルドしていると思われます。
carnage0216

2018/05/01 11:19

なるほど! gccに関してはARM版Linux向けのコードに合わせて周辺機器を取り付けているため、gccによってARM版Linuxから出力されたバイナリデータが正常に動くのですね。 たしかに、osやコンパイラに合わせてハードを作った方が使いやすいですよね。
catsforepaw

2018/05/01 12:03

なぜ突然ハードウェアを持ち出すのか、意味が判りません。gccと周辺機器は何の関係もありません。私が回答に書いたことは、ソフトウェアに関する話です。Raspberry PiにLinuxを搭載することで、POSIX準拠のツールやソースコードが利用できるという話です。 ハードウェアとしてはARMアーキテクチャー向けの規格(Windowsでいうところの標準機(PC/AT互換機)に相当する何か)があるとは思いますが、そちらの方面には詳しくないのでよく判りません。判らなくてもプログラムを書くには困りません。
carnage0216

2018/05/01 13:53

話をややこしくしてしまいすいません。 あの、今回のようなソフトウェアに関して勉強するには何を勉強すればいいでしょうか? 組み込みOSやコンパイラなど勉強すればいいでしょうか。
catsforepaw

2018/05/01 17:35

> 今回のようなソフトウェアに関して勉強するには何を勉強すればいいでしょうか? なかなか難しい質問です。私自身「この知識を得るためにこうした」という明確なことはしておらず、長年の積み重ねで今に至るという感じなので、うまく説明できないのです。 とりあえず、今の私のOSやプログラミングに関する知識の基本は、本や雑誌で得たものです。若い頃は毎月5,6冊読んでいた時期もありました(今ではすっかり読まなくなってしまいましたが……)。雑誌で幅広い知識を得て、興味深い事柄に関してより深く知るために専門書を買う、という感じでした。仕事でLinuxを使わざるを得なくなったときは、Linuxの本を何冊か買ってきて付録のインストールCDで自分のPCにLinuxをインストールし、いろいろ試しながら学んだものです。 今ではネットで検索すれば何でも出てきますが、ある程度は知識がないと検索しようにもキーワードが思いつかないでしょうし、ネットの情報は玉石混淆ですから、そうと気づかずに石ころを拾ってしまうかもしれません。やはり、最初は体系的にまとめられている本で勉強するのが、結果的には一番近道なのではないかと考えます。 > 組み込みOSやコンパイラなど勉強すればいいでしょうか。 そんなものは後回しでも良いです。デスクトップ環境でかまわないので、開発ツールを使いこなして思い通りにアプリを作って動かせるようになれば、その辺のことも理解できるようになります。
carnage0216

2018/05/01 20:36

貴重なご意見どうもありがとうございます。 そうですよね。まずは自分で一からプログラムを作れるだけの量をこなして、ツールを使いこなし、作りたいものを作ったほうがいいように思えます。 私はまだまだ勉強が足りないので。 わかりました。どうもありがとうございました。
catsforepaw

2018/05/02 02:03

思い返してみると、体系的に学んだ一番最初は、情報処理系の試験のための勉強ですね。すでに廃止されましたが、当時はマイクロコンピュータ応用システム開発技術者試験というのもあって、それを取るための勉強は、ハード寄りの知識を得るのに大いに役に立ちました。現在はエンベデッドシステムスペシャリスト試験に置き換わっていて、難易度は高めだそうです。 国家試験だけでなく民間試験もいろいろあるので、それらの勉強は、総合的・体系的に学ぶのにうってつけかもしれません。
guest

0

やりたい事に対しての結論だけ述べると
以前にも何回か言ったように「CMakeつかって自分でライブラリをビルドしてください。」という事になります。

mingwはgccでwindows用実行ファイルを生成するためのプロジェクトです。

よって

コンパイラ gcc(Mingw)

で得られるのはWindows用の.exe/.dll/.lib/.oのみです。
windows上でコンパイルしたいのならばラズパイ用のgccを作るなり拾ってくるなりしなければいけません。

後半の疑問に思った事とやらは眠さと相まってうまく解読できませんが

Raspbian is a free operating system based on Debian optimized for the Raspberry Pi hardware.

なんだからDebianで動くように作られてるのならばRaspbian上で動く
(ようにRaspbianが頑張る)
ライブラリ側はDebianで動くように作る。
それだけ

投稿2018/04/30 21:07

asm

総合スコア15147

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

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

carnage0216

2018/04/30 21:38 編集

こうなったら、ラズパイのOSをWindows10にするしかないみたいですね。 探してみるとWindows版のラズパイのOSもあるのでマイクロSDカードに焼いてきます。 しかし、ラズパイのCPUはARMなので仮に実行ファイルが得られても正常に動作するかはやってみないとわからないです‥‥。
asm

2018/04/30 21:43

x86/x86_64のラズパイがあるならともかく、arm CPUであることが変えられない以上 茨の道が、道ですらなくなることでしょう。 ARMとintel x86では機械語に互換性が無いので無理です。
keicha_hrs

2018/05/01 06:27

Windows 10 IoT Coreのことを言ってるのかな
guest

0

Windowsでopencvのライブラリが得られたとして、なぜそのライブラリが正常に動くのでしょうか?
Linixでopencvのライブラリが得られたとして、なぜそのライブラリが正常に動くのでしょうか?

って疑問は浮かばないんですか?

ハードウェア等モロモロの差異を吸収するのがドライバなり低レイヤのお仕事です。
そいつらががんばってくれてます。

...あ、クロスコンパイルの話してます?

投稿2018/04/30 20:41

編集2018/04/30 21:03
episteme

総合スコア16614

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

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

carnage0216

2018/04/30 21:30 編集

解答ありがとうございます。 >>Windowsでopencvのライブラリが得られたとして、なぜそのライブラリが正常に動くのでしょうか? >>Linixでopencvのライブラリが得られたとして、なぜそのライブラリが正常に動くのでしょうか? 疑問は浮かびましたがgccコンパイラがインテルのCPU(やCPU周辺の周辺機器)に対応していると考えていたので質問しませんでした。 なるほど、コンパイラだけでなくハードウェアやドライバや低レイヤがお仕事していたのですね。 では、ラズパイ用のOSことラズビアンでopencvのライブラリが正常に動かすためにはラズパイのCPU(ARM)の構造やドライバなど理解する必要があるのですか? なんだか思っている以上に難しそうです。
episteme

2018/04/30 22:58

使い方さえわかってれば構造なんか気tにしなくていい。 てか気にしなくていいように低レイヤががんばってくれてる。
carnage0216

2018/04/30 23:02

わかりました。 やってみます。
episteme

2018/04/30 23:09

Windows/LinuxでOpenCVほいほい使えるようになった?
carnage0216

2018/04/30 23:17

Windowsでなら、opencvにおいて多少のエラーくらいは解決出来るようにはなりました。(エラーのほとんどは皆様に助けていただいてようやくそれなりに出来るようになりました。) Linuxはまだ難しいです。 小型pcとラズパイに入れましたがvsのような開発環境がなくgccでopencvを使おうと過去に頑張り挫折してからWindowsのvsを使っています。 今なら、gccを少しは使えるかもしれないので小型pcの方でopencvを試してみるのも良いかもしれません。 最終目的は画像処理をCPUで並列処理できた後、いずれはCPUとGPUを合わせて使う事です。
guest

0

調べてみる限り、MingwのGCCでRaspberry Piのクロスコンパイルする方法は見つかりませんでした。OpenCVのソースコードをどうするか以前に、MingwではRaspberry Piで動く実行ファイルやライブラリを作成することができません。まずは、Raspberry Pi上で動く実行ファイルを作成できる環境を整え、Hello worldといった単純な実行ファイルを作成できることから始めてください。主な方法は3つです。

  • Raspberry Pi上でコンパイル
    コンパイル速度は遅いですが、一番簡単で一番確実です。
  • Debian Linux上のGCCでクロスコンパイル
    DebianのバージョンはRaspbianのバージョンに合わせた方がトラブルが少なくなるでしょう。Debian自体は仮想環境でも構いません。クロスコンパイルはある程度の知識が必要とするため、初心者にはお勧めできません。
  • Windows toolchain for Raspberry/PIを使ってコンパイル
    Windowsしかなく、仮想環境のLinuxすら用意できない時の手段です。Visual Studio上で開発もできる優れもののようです。詳しい使い方はリンク先の下にあるTutorialのリンクを辿ってください。

なお、Raspberry PiにOpenCVをインストールしたという例をいくつか見つけましたが、すべてRaspberry Pi上でコンパイルする方法でした。クロスコンパイルやWindows toolchainを使った成功例はないため、できるかどうかすらわからず、チャレンジするとしても、相当高度な知識が無いと難しいでしょう。

投稿2018/04/30 20:54

raccy

総合スコア21735

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問