未分類

現時点が、これがベースとなる座標 (2024/07/07)

var polygon = [][]float64{
    {35.36394967, 139.61846500},
    {35.3618532453048, 139.61890414751684}, // 変更 35.3618532453048, 139.61890414751684
    {35.36170465505306, 139.6220415552594},
    {35.36163108058289, 139.62334070015595},
    {35.363117271878345, 139.62314221968566},
    {35.36335187635167, 139.62481739887647},
    {35.36310056060587, 139.62485183402688},
    {35.36376860001917, 139.6288186562702},
    {35.36420166714637, 139.6297897196359},
    {35.36754482323006, 139.6296024603071},
    {35.37126945661188, 139.62886244945108},
    {35.37375189636854, 139.62615207124352},
    {35.37464657021711, 139.623189740366},
    {35.37574882601201, 139.6213765671167},
    {35.37527643251494, 139.6210117866997},
    {35.37306314467156, 139.6217413475337},
    {35.37268696718477, 139.62013202216457},
    {35.37018828750506, 139.61840497406456},
    {35.370782160278, 139.61705458898427},
    {35.36947068533102, 139.61641732865053},
    {35.370596575495014, 139.61476348635583},
    {35.37078029225879, 139.61403393574466},
    {35.36864433631068, 139.61438212951467},
    {35.36653571408147, 139.61453772192408},
    {35.3633959839821, 139.61469428997398}, // 追加
    {35.36351410, 139.61626070},
    {35.36394967, 139.61846500},
}

 

 

(図面)F:\しゅらばしゅう\有吉先生データ\富岡エリア_座標.pptx
(コード) C:\Users\ebata\tomioka_school\src\trip_school\main.go

Polygon使う時の注意点(赤丸に注意: db.Query()で簡単にエラーにされる

 

// C:\Users\ebata\tomioka3B\src\others\main35.go
/*
	実験用の座標を作る
	修正後 (富岡西5丁目を削除し、富岡6丁目の下1/4を削除)
*/

package main

import (
	"database/sql"
	"fmt"
	"log"
	"regexp"
	"strconv"

	_ "github.com/lib/pq"
)

func main() {
	// 取り扱うDBによってノード番号が代わるので注意すること
	// 例えばtomioka_db_c とtomioka_dbは全く異なる
	db, err := sql.Open("postgres",
		"user=postgres password=password host=192.168.0.23 port=15432 dbname=tomioka_db sslmode=disable")
	if err != nil {
		log.Fatal("OpenError: ", err)
	}
	defer db.Close()

	// 修正後のターゲットの富岡地区 (富岡西5丁目を削除し、富岡6丁目の下1/4を削除)

	query := `
	SELECT st_asText(
		ST_GeneratePoints(
			ST_GeomFromText(
				'POLYGON((
					35.36394967 139.61846500,
					35.36216810 139.61890850,
					35.36170465505306 139.6220415552594,
					35.36163108058289 139.62334070015595,
					35.363117271878345 139.62314221968566,
					35.36335187635167 139.62481739887647,
					35.36310056060587 139.62485183402688,
					35.36376860001917 139.6288186562702,
					35.36420166714637 139.6297897196359,
					35.36754482323006 139.6296024603071,
					35.37126945661188 139.62886244945108,
					35.37375189636854 139.62615207124352,
					35.37464657021711 139.623189740366,
					35.37574882601201 139.6213765671167,
					35.37527643251494 139.6210117866997,
					35.37306314467156 139.6217413475337,
					35.37268696718477 139.62013202216457,
					35.37018828750506 139.61840497406456,
					35.370782160278 139.61705458898427,
					35.36947068533102 139.61641732865053,
					35.370596575495014 139.61476348635583,
					35.37078029225879 139.61403393574466,
					35.36864433631068 139.61438212951467,
					35.36653571408147 139.61453772192408,
					35.36394967 139.61846500
				))'
			),
		25)
	)
	`
	rows, err := db.Query(query) // この25が生成する乱数座標

	if err != nil {
		log.Fatal(err)
	}
	defer rows.Close()

	var msg string

	for rows.Next() {
		if err := rows.Scan(&msg); err != nil {
			fmt.Println(err)
		}

		// まずはMULTIPOINTをバラバラに分解する
		arr1 := regexp.MustCompile("[() ,]").Split(msg, -1) // '('か、')'か、' 'か、","で分割する → "[中身]" という構造でまぎらわしい

		// 2つの値を一度に取得する (最初の値" MULTIPOIN"をスキップする為に、i:=1から始める)
		for i := 1; i < len(arr1); i += 2 {
			// arr1[i]とarr1[i+1]は2つの値を表します
			if i+1 < len(arr1) {
				value1, _ := strconv.ParseFloat(arr1[i], 64)   // 乱数の緯度
				value2, _ := strconv.ParseFloat(arr1[i+1], 64) // 乱数の経度
				fmt.Println(value1, value2)
			}
		}
	}
}

未分類

特許明細書に添付する図面を書いています ―― 何やっているか、モロバレですね。

もちろん、自分の特許発明を殺す(特許法29条)ような図面は公開していません ―― 私、プロですから。

未分類

21歳を越えた次女は、我が家の自動車で運転を始めました。

My second daughter, over 21 years old, started driving our automobile.

そして、私は『ティーンエージャの3年間の無事故』を素直に信じません。

先日、次女を駅にピックアックしに行った時、『運転させて欲しい』と言われたので、運転席を譲りました.

The other day, when I went to pick up my second daughter at the station, she asked me to let her drive, so I gave up my driver's seat.

次女:「何、しれっと後部座席に座っているの。助手席に座って運転を指導してよ」

Second daughter: "What are you doing sitting in the back seat? Why don't you sit in the passenger seat and coach me on how to drive?

私:「いや、助手席って、死亡率が一番高いし・・・。私は、まだママと一緒に人生を生きていきたいんだ」

Me: "Well, passenger seats have the highest mortality rate... I still want to live my life with my wife."

と、抵抗したのですが、許して貰えませんでした。

I resisted, but she would not let me.

-----

人の運転は、基本的に怖いものです。

Driving people is fundamentally scary.

そして、初心者の運転は、ジェットコースターより怖い。

And driving for beginners is scarier than a roller coaster.

自分のステアリングとアクセルとブレーキのタイミングが全く違う。

The steering, gas pedal, and brake timing differ entirely from mine.

車幅の認識、道路の中央や路側帯からの距離感が違う。

The perception of vehicle width and distance from the center of the road or roadside strip is different.

急加速と急減速で、頭部にありえない"F"がかかる。

Sudden acceleration and deceleration cause an impossible "F" to be applied to the head.

後方確認後、ターゲットをロックオンしないままでバックの車庫入れが開始される。

After the rearward check, a backup garage entry is initiated without locking it onto the target.

総じて言えば、自分の車の位置を、空間的に把握する ―― 3Dビューがない。

You may know where your car is spatial; however, she has no 3D view.

-----

とは言え、初心者が、最初から「3Dビュー」を持っていたら、それはそれで怖いのです。

Nevertheless, if a beginner had a "3D view" from the beginning, that would be scary.

『自分は運転の才能がある』と過信している初心者の車は、『走る殺人兵器』です。

The car of a beginner who is overconfident that they are a talented driver is a "killer weapon.

『初心者"が"運転を怖がり』『初心者"の"運転が怖い』ことは、とても良いこと ―― それは分かっているのです。

'Beginners are afraid to drive' and 'We are afraid of Beginners driving' are excellent statements—I know that.

-----

以前、私の姉は、『初心者というのは、車を一台半壊させて、一人前』というようなことを言っていました。

My sister once told me, "A beginner becomes a driver after they have destroyed half a car.

私はそこまで腹を括ることはできませんが ―― それでも、娘が人身事故を起こすことを考えれば、助手席で怯えることくらい、どうってことはない、とは思っています。

I can't be that prepared, though; I don't think that being frightened in the passenger seat is anything compared to my daughter being involved in a personal injury accident.

未分類

NHKスペシャル 「語れなかったあの日 自治体職員たちの3.11」

NHK Special "The Day We Couldn't Talk About Local Government Officials on March 11"

の録画を、一日5分間見ています。

I watch the recordings for five minutes a day.

5分間以上、連続では見られません ―― 見ているのが、本当につらくて。

I can't watch it for more than 5 minutes straight -- it's tough to watch.

映画のように悲壮な音楽を流すこともなく、無意味な演出をすることもなく、インタビューアーが話を促すこともない。

No tragic music like in the movies, no pointless staging, and no interviewer prompting the interviewee to talk.

ただ淡々と語られる、被災者を支援する側に立たされた、自治体職員たちの体験が、胸を抉ります。

The experiences of local government officials, who were forced to stand on the side of the victims and support them, are heartbreakingly told in a simple, unaffected manner.

『そんなに辛いながら、見るのを止めればいい』とも思うのですが、なんだか、それは、いけないような気がしまして。

I also think, "If it's so painful, just stop looking at it," but that doesn't seem right.

-----

私、震災ボランティアに参加したのって、実質、この時だけです。

This was practically the only time I participated in earthquake disaster volunteer activities.

震災が発生する度に、ボランティアに参加しないことに、後ろめたさがないわけではありません。

Every time a disaster strikes, I am not without guilt for not volunteering.

ただ、将来、私が被災した時には、

However, in the future, when I am affected,

『どこかでがんばってくれている誰かの善意と努力を信じ、そして、私が助けてもらえなくても誰も恨まない』

"I believe in the goodwill and effort of someone working hard somewhere, and I don't begrudge anyone if I can't be helped."

と誓っていますので、

I swear to you. So I think

「それで、勘弁して下さい」

Forgive me for that."

と思っています。

-----

そういえば、私がお勧めしていたこの番組ですが、今ならネットで見れるようですよ。

By the way, this program I was recommending is now available online.

ちなみに、私は「NHKスペシャル 原発メルトダウン 危機の88時間」の方を、お勧めしたいです。

 

未分類

https://airuca.com/camera-rtsp/

Panasonic / i-Pro

WV-S2130

RTSPパス rtsp://

Src/MediaInput/stream_1
Src/MediaInput/stream_2
Src/MediaInput/stream_3
Src/MediaInput/h264/stream_1
MediaInput/h264
MediaInput/mpeg4
VideoInput/1/h264/1

 

なんか、ドンピシャな情報

からコピペさせて頂きました。

====== さらに引用 ここから =======

これでRTSPストリームのURLはわかりました。
次にこのURLで映像を見るとき、どうやってカメラに設定したユーザー名とパスワードを使って認証させるのか?という課題が生じます。
こちらは下記のようなURLを作れば問題ありません。
(例)H.264/H.265のストリーム1の映像を参照したい場合
rtsp://UserName:Password@IP_Address_of_camera/Src/MediaInput/stream_1

そして最後に、上のURLをffplayで再生するには下記のコマンドをffplayのあるディレクトリ内で実行します。

ffplay -i rtsp://UserName:Password@IP_Address_of_camera/Src/MediaInput/stream_1

再生はされるがよく途切れる、灰色になって表示されない部分がよく出て不安定といった場合は、RTSPでのデータ伝送にTCP接続を強制すると改善するかもしれません。
TCP接続を強制する場合のコマンドは下記のようになります。

ffplay -rtsp_transport tcp -i rtsp://UserName:Password@IP_Address_of_camera/Src/MediaInput/stream_1

このとき、ffplayのウィンドウサイズはカメラ側で設定した解像度に合わせられます。
ffplayでPanasonicのIPカメラの映像を再生する方法は以上です。

====== 引用、ここまで ======

ありがとうございました。

 

JVC

VH-H268R
VH-H268VPR

RTSPパス rtsp://

ONVIF/Streaming/channels/0
ONVIF/Streaming/channels/1
ONVIF/Streaming/channels/2
ONVIF/Streaming/channels/3

未分類

tomioka_db_d.sql,tomioka_db_e.sql,tomioka_db_f.sqlと(新tomioka_db_c.sql)も作成して、\\192.168.0.9\shareに逃しました。
ーーーーー

$ pg_dump -U postgres -h 192.168.0.23 -p 15432 tomioka_db_c > tomioka_db_c.sql
Password:
として、tomioka_db_c のバックアップは\\192.168.0.9\shareに逃してあります。

DBに直接手を入れる処理

マスタDBに手を入れるのは怖すぎるので、とりあえず、こんな感じでテスト用のDBを作成します。
C:\Users\ebata>createdb -U postgres -h 192.168.0.23 -p 15432 tomioka_db_c_trial
Password:

ebata@DESKTOP-P6KREM0 MINGW64 ~(こっちのシェルを使うこと。パイプを使うため)
$ pg_dump -U postgres -h 192.168.0.23 -p 15432 -Ft tomioka_db_c | pg_restore -U postgres -h 192.168.0.23 -p 15432 -d tomioka_db_c_trial

よし、これで、tomioka_db_c_trialの方で、安心して試せる ―― 脳切開手術

未分類

以前より、私は、時空間を取り扱う発明などを出願してきました。

I have been applying for inventions dealing with space-time and other matters for some time now.

私の特許発明は、かなり「SF小説/アニメ頼み」のところがあります。

My patented inventions are "science fiction novel/anime dependent."

(ちなみに、『シュタインズゲート』は、私の出願の"後"の放映です)。

(Incidentally, "Steins;Gate" aired "after" my application.)

-----

しかし、最近の、生成AIや、メタバースの出現で、「SF小説/アニメ頼み」も苦しくなってきました。

However, with the recent emergence of generative AI and the metaverse, "relying on science fiction novels/animations" has become difficult.

昨日も、一晩中、グループチャットで、特許ネタの案出で苦しんでおりました。

Yesterday, too, I spent all night in the group chat room struggling with a patent story idea.

「十分に発達した科学技術は、魔法と見分けがつかない」は、SF作家アーサー・C・クラークの定義ですが、

Though "Any sufficiently advanced technology is indistinguishable from magic.," as defined by science fiction author Arthur C. Clarke,

私に言わせれば、

In my opinion,

「十分に発達した汎用技術は、発明創成の阻害要因である」

"Well-developed general-purpose technology is a disincentive to invention.

です。

I believe this to be true.

今の私は、特許法第29条第2項(進歩性)に関する、特許審査官との、頭脳内戦闘(論戦)シミュレーションで、疲れ果てております。

I am now exhausted from simulating an intra-brain battle (argument) with the patent examiner regarding Article 29(2) of the Patent Law (inventive step).

江端さんのひとりごと「それでも貴方は特許出願したいですか?」

未分類

江端さんへ電子メールを出す前に
----- 江端から、効率よく回答を引き出す為に -----
(出展はこちら→https://kobore.net/mail.txt)

現在、コロラド在住(筆者注:2002年3月1日帰任)ということもあり、現地に興味のある人からのメールが多くなりました。

私としては、時間が許し、気の向く限り、お返事申し上げたいと思っているのですが、最近、礼を失念した電子メールの文面が多くて不快に感じることが多いです。

勿論、電子メールを送った方は、江端を不快にさせようなどと言う気持など全くないことは百も承知ですが、江端が江端の基準で設定した勝手なポリシー

Mr.Ebata's Mail Policy

を守らないと、江端を動かすことは出来ません。

とにかく、江端から何かしらの情報を引き出したいのであれば、江端を不快にさせるのは得策ではありません。

例えば、こんなメールは、江端を非常に不快にさせます。

--------------------------------------------

(挨拶、自己紹介、背景一切なし)

○○について何か知っていたら教えて下さい。

--------------------------------------------

馬鹿者!

何で見も知らんお前の為に、私が情報を収集し、電子メールを作成する労を取らねばならん!

こんな風に、江端が思ってしまったら最後、江端はあなたの電子メールを最後まで無視し続けます。

あんまりしつこいと『無礼メール』のサンプルとして、このページで公開しかねません。

その他、

- なれなれしいメール
- 何を言いたいのか判らないメール
- html形式のメール
- 実名が記入されていないメール

も、受け取らなかったことにします。

一方、これとは逆に、江端が読んだ瞬間に返事を書く(であろう)電子メールの構成を、例題を使ってご説明致します。

--------------------------------------------

(1)挨拶

始めてお便り申し上げます。

(2)簡単な自己紹介

現在、米国コロラド州のヒューレットパッカード社に勤務しております、Tomと申します。

(3)このメールを出すに至った経緯

江端さんがお作りになられた、「江端さんのホームページ」、とても楽しく拝見させて頂きました。

(4)質問の背景

先程申し上げました通り、私は現在米国にて仕事をしておりますが、この度、私が「江端さんのホームページ」の話題を上げましたところ、職場のアメリカ人の同僚が、是非一度読んでみたいと申しておりました。

(5)質問の内容

そこで、私としても彼らにも是非読んで貰いたいと思っておりますが、今後、「江端さんのホームページ」の英語翻訳版を作成させる予定などがございませんでしょうか。

(6)お願いの言葉

もしそのような予定がございましたら、大変お手数とは存じますが、御連絡頂けましたら幸いと存じます。

(7)終りの挨拶

これからも、ますますの御活躍を、心よりお祈り申し上げております。

--------------------------------------------

基本的には、初対面の人に、普通に手紙を出す時に普通に書く文章を、電子メールで展開して頂ければ結構なだけなのですが、電子メールの気楽さもあってか、その程度の気使いもして貰えないのは大変残念です。

ともかく、私はそういう無礼なメールは、要りません。

江端に電子メールを出して、質問の回答を引き出したい時には、江端を上手く『いい気持ち』にさせて、最大限利用できるよう、色々と電子メールの文面を工夫されることを、お勧め申し上げます。

未分類

User
以下のプログラムを実行すると、以下のようなエラーがでてきます。 [ERROR:0@0.100] global cap.cpp:643 open VIDEOIO(CV_IMAGES): raised OpenCV exception: OpenCV(4.9.0) /io/opencv/modules/videoio/src/cap_images.cpp:430: error: (-215:Assertion failed) !filename_pattern.empty() in function 'open' Traceback (most recent call last): File "/home/cam/virtual_camera/vc.py", line 32, in <module> main() File "/home/cam/virtual_camera/vc.py", line 24, in main cv2.imshow('Frame', frame) cv2.error: OpenCV(4.9.0) /io/opencv/modules/highgui/src/window.cpp:1272: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage' 対処方法を教えてください。 import cv2 def main(): # mp4ファイルのパスを指定 video_path = "192.168.1.1.mp4" # mp4ファイルを開く video_capture = cv2.VideoCapture(video_path) # カメラの解像度を設定 width = 640 height = 480 video_capture.set(cv2.CAP_PROP_FRAME_WIDTH, width) video_capture.set(cv2.CAP_PROP_FRAME_HEIGHT, height) # RTSPカメラのフリをするための準備 rtsp_url = "rtsp://localhost:38089/live" # RTSPサーバーのアドレス fourcc = cv2.VideoWriter_fourcc(*'H264') # ビデオコーデックを指定 rtsp_camera = cv2.VideoWriter(rtsp_url, fourcc, 30, (width, height)) # 30fpsで設定 # mp4ファイルを繰り返し再生してRTSPカメラのフリをする while True: ret, frame = video_capture.read() # フレームを読み込む if not ret: video_capture.set(cv2.CAP_PROP_POS_FRAMES, 0) # ファイルの終端に到達した場合、最初に戻る continue rtsp_camera.write(frame) # フレームをRTSPカメラに書き込む # フレームを表示(テスト用) cv2.imshow('Frame', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break # 後処理 video_capture.release() rtsp_camera.release() cv2.destroyAllWindows() if __name__ == "__main__": main()
ChatGPT

このエラーメッセージは、2つの主要な問題を示しています。

  1. ファイルが開けない問題:
    • このエラーは、OpenCVが指定されたビデオファイル(この場合は192.168.1.1.mp4)を開けないことを示しています。これは、ファイルパスが間違っているか、ファイルが存在しない、あるいはアクセス権限がない場合に発生する可能性があります。
    • 解決策としては、まずファイルパスが正しいかどうかを確認してください。また、ファイルが存在し、アクセス権限があることを確認してください。
  2. cv2.imshow関連の問題:
    • このエラーは、OpenCVがコンパイルされた時に必要なGUIウィンドウサポートが含まれていないことを示しています。これは通常、LinuxシステムでGUI関連のライブラリが不足しているか、あるいは適切にリンクされていない場合に発生します。
    • UbuntuやDebian系のLinuxディストリビューションを使用している場合、libgtk2.0-devpkg-configをインストールしてから、OpenCVを再コンパイルすることで解決できます。以下のコマンドを実行してください:
      sh
    • sudo apt-get update
      sudo apt-get install libgtk2.0-dev pkg-config

      その後、OpenCVをソースから再コンパイルする必要があります。これには、OpenCVのソースコードをダウンロードし、cmakeを使ってビルド設定を行い、makeコマンドでビルドを実行するプロセスが含まれます。このプロセスは時間がかかる場合がありますが、GUI機能を使うためには必要です。

      OpenCVの再コンパイルが必要かどうかを判断する前に、video_pathが正しいかを再確認し、必要に応じて修正してください。また、ビデオファイルが正しく読み込まれているかどうかを確認する別の方法として、ファイルの読み込みに成功したかどうかをチェックするためにret変数の値をログに出力することもお勧めします。

User
video_pathが正しいかを再確認の方法を教えてください
ChatGPT

video_pathが正しいかどうかを確認するには、いくつかの手順を踏むことができます。まず、指定されたパスが実際に存在するファイルを指しているかを確認する必要があります。これはPythonのos.pathモジュールを使用して簡単に行えます。以下のステップでvideo_pathの確認を行う方法を示します。

  1. ファイルの存在確認:
    • Pythonのos.path.exists関数を使用して、ファイルが存在するかどうかを確認します。
    • また、os.path.isfile関数を使用して、指定されたパスが実際にファイルであることを確認することもできます。
  2. パスの正確さ:
    • 絶対パスまたは相対パスが正しく指定されているかを確認します。絶対パスはファイルシステムのルートから完全なパスを示し、相対パスは現在の作業ディレクトリからの位置を示します。

以下のコードスニペットは、上記の検証を行う方法を示しています。

python
import os

video_path = "192.168.1.1.mp4" # ここでのパスは例としています。実際のパスに置き換えてください。

# ファイルが存在するかどうかを確認
if os.path.exists(video_path) and os.path.isfile(video_path):
print("ファイルが存在し、正しいパスです。")
else:
print("ファイルが存在しないか、パスが間違っています。")

このスクリプトを実行することで、指定されたvideo_pathが正しいかどうかを確認できます。ファイルが存在しない場合やパスが間違っている場合は、パスを修正してください。ファイルがネットワーク上にある場合(例えば、IPアドレスを含むパスを使用している場合)、そのファイルにアクセスできるかどうかを確認するためには、適切なネットワークパスまたはストリーミングURLが使用されていることを確認する必要があります。

User
ファイルが存在し、正しいパスです。 と表示されました。
ChatGPT

ファイルが存在し、正しいパスであることが確認できた場合、問題の原因は他にあります。エラーメッセージから、2つの主な問題が考えられます:

  1. OpenCVのGUI関連の機能が動作していない
    • cv2.imshowでエラーが発生していることから、OpenCVがGUIライブラリ(GTK、Qtなど)と正しく連携していない可能性があります。これは、OpenCVのインストール時にGUIサポートが含まれていない、またはGUIライブラリ自体がインストールされていないことが原因である可能性があります。
  2. ビデオキャプチャデバイスの問題ではない
    • ファイルパスが正しく、ファイルも存在するため、ビデオキャプチャデバイス(この場合はファイル)に関する問題ではありません。

解決策

既に確認したGUI関連の問題に対する解決策を再度試す価値があります。具体的には、OpenCVがGUIライブラリと正しく連携するようにするために必要な依存関係をインストールし、OpenCVを再コンパイルすることです。以下は、そのためのステップです:

  1. 必要なGUIライブラリのインストール: UbuntuやDebian系のシステムでは、以下のコマンドを実行します:
    bash
  1. sudo apt-get update
    sudo apt-get install libgtk2.0-dev pkg-config

    これにより、GUI開発に必要なライブラリがインストールされます。

  2. OpenCVの再コンパイル: OpenCVをソースから再コンパイルすることで、これらのライブラリを使用するように設定できます。これには、OpenCVのソースコードをダウンロードし、CMakeを使用してビルド設定を行い、その後ビルド(コンパイル)を実行するプロセスが含まれます。
  3. 別の表示方法の検討cv2.imshowが使用できない場合は、画像処理の結果を確認するための別の方法を検討することもできます。例えば、処理したフレームを画像ファイルとして保存してから、別の画像ビューアで開く方法があります。

GUIライブラリが適切にセットアップされていないことが原因である場合、上記のステップで問題が解決するはずです。それでも問題が解決しない場合は、OpenCVのインストール方法(pip経由、ソースからのビルドなど)や、使用しているシステムの詳細(OSのバージョンなど)に関する情報を再確認し、それに基づいて対処を検討してください。

User
OpenCVの再コンパイル方法を教えてください
ChatGPT

OpenCVをソースから再コンパイルするには、いくつかのステップを踏む必要があります。以下は、Linuxベースのシステム(特にUbuntuやDebian系)でOpenCVを再コンパイルするための一般的な手順です。このプロセスは、OpenCVを最新バージョンでビルドし、GUIサポートを含めることを目的としています。

事前準備

  1. 必要な依存関係をインストールします。OpenCVとそのGUI機能を使用するためには、いくつかのパッケージが必要です。
    bash
  1. sudo apt-get update
    sudo apt-get install build-essential cmake pkg-config
    sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev
    sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
    sudo apt-get install libxvidcore-dev libx264-dev
    sudo apt-get install libgtk-3-dev
    sudo apt-get install libatlas-base-dev gfortran
    sudo apt-get install python3-dev

OpenCVのソースコードのダウンロード

  1. OpenCVとOpenCV_contrib(追加機能を含む)のソースコードをダウンロードします。
    bash
  1. cd ~
    git clone https://github.com/opencv/opencv.git
    git clone https://github.com/opencv/opencv_contrib.git

    特定のバージョンをビルドしたい場合は、各リポジトリ内でgit checkout <バージョンタグ>を実行してください。

ビルド設定

  1. ビルドディレクトリを作成し、CMakeを使用してビルド設定を行います。
    bash
  1. cd ~/opencv
    mkdir build
    cd build
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D OPENCV_GENERATE_PKGCONFIG=ON \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D BUILD_EXAMPLES=ON ..

    このコマンドは、OpenCVをビルドするための様々なオプションを設定します。必要に応じてオプションを調整してください。

コンパイル

  1. コンパイルを実行します。このプロセスには時間がかかる場合があります。
    bash
  1. make -j$(nproc)

    -j$(nproc)オプションは、利用可能なすべてのCPUコアを使用してビルドを加速します。

インストール

  1. コンパイルが完了したら、システムにインストールします。
    bash
  1. sudo make install
    sudo ldconfig

確認

  1. OpenCVが正しくインストールされたかを確認します。
    bash
pkg-config --modversion opencv4

またはPythonから:

python
  1. import cv2
    print(cv2.__version__)

これらのステップを完了すると、OpenCVがシステムにインストールされ、GUI関連の機能も使用できるようになります。エラーが発生した場合は、エラーメッセージを注意深く読み、不足している依存関係がないかどうかを確認してください。

未分類

もう寝たいんだが、システムが寝かせてくれない。

止めるわけにもいかないし(そういう中断で、これまでいくつのシステムを壊してきたことやら)

つくづく思うのですが、パッケージは、そのインポートの前に「予想完了時刻」を示すべきだ、と思うのです