keep-loving-pythonのブログ

Pythonを愛し続けたいです(Pythonが流行っている限りですが。。。)

OpenCVによる撮影画像の連結をいろいろ試してみる【1】

OpenCVによる撮影画像の連結をいろいろ試してみる【1】

基本は、GitHubのコードを動かすだけ。

ORB feature based image stitching for UAV images

比較的シンプルなもの

環境

windows10 python3.7 cv2.version.opencv_version 4.5.3.56 <--実行時に確認

↓ pip

opencv-contrib-python             4.5.3.56
opencv-python                     3.4.15.55

URL

https://github.com/cugblw/UAV-Image-stitching

試した結果

↑ 白で見える道とかが、なぜか、かなりずれている。こんなにずれるものか。。。。????

(かなりずれている、は、作業間違いでした。
ただ、下のほうで、二重になっているのでは?)

仕組みの確認

↓ORB

  keypoints1, descriptors1 = orb.detectAndCompute(img1, None)#descriptors are arrays of numbers that define the keypoints
  keypoints2, descriptors2 = orb.detectAndCompute(img2, None)

↓ homography

    # Establish a homography
    M, _ = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)

補足

参照元で示されている図は、↓。たぶん、OpenCVのバージョン差による設定デフォルトの差だと思う。

本人の関連記事

keep-loving-python.hatenablog.com

keep-loving-python.hatenablog.com

(狭い視点ですが)DoxygenでPythonを扱うのは無理です。

(狭い視点ですが)DoxygenPythonを扱うのは無理です。

検討条件

windows10
python3.7
doxygen1.9.5(2022/11/03にインストール)

検討結果

対象のpythonコード

import sys

def tasu(aa,bb):
    c = aa + bb
    return c

d = tasu(10,20)
if d > 5:
    print("d",d)
else:
   sys.exit()

結果

call graphとか、でましぇーん。

設定とか

javaを選ぶのがいいというウワサに従い。。。
そもそも、Pythonが選べないのが、つらすぎる。。。。

コメント

いろいろ機嫌をとれば何か出ると思いますが、、、、
ワタシの場合は、利用目的が逆で、
そのままのコードで、call graphとか出して、コードの理解を薦めたいという立場。。。

⇒ 快適に動作するバージョンが出たりしたら、コメント等頂けると幸甚!!

Pythonあるある。何の説明もなく、プロンプトに戻る。

Pythonあるある。何の説明もなく、プロンプトに戻る。

[Pythonあるある]症状

正常に動作すると、例えば、何かのprintがされるようなもので、
下記のように、何も起こらずに、プロンプトに戻る。

C:\_JITAKU_DE_GYOMU\....ing-master>python XXXXching.py

C:\_JITAKU_DE_GYOMU\....ing-master>

症状の原因

状況証拠より、たぶん、メモリ不足、だろう。

補足

↑ プロセスモニタだと、何か、見れるはず。
今回は、段取り悪く、流れたけど。。。

解決策。cv2.error: OpenCV(4.5.3) C:\Users\......src\alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 148879029 bytes in function 'cv::OutOfMemoryError'

解決策。cv2.error: OpenCV(4.5.3) C:\Users......src\alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 148879029 bytes in function 'cv::OutOfMemoryError'

エラー

環境

windows10
python3.7

エラー

cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-_xlv4eex\opencv\modules\core\src\alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 148879029 bytes in function 'cv::OutOfMemoryError'

エラー詳細

Traceback (most recent call last):
  File "UAV-image-stitching.py", line 37, in <module>
    n = cv2.imread(img)
cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-_xlv4eex\opencv\modules\core\src\alloc.cpp:73: error: (-4:Insufficient memory) Failed to allocate 148879029 bytes in function 'cv::OutOfMemoryError'

解決策

言葉どおり、メモリが足らないので、
ファイルを整理するとか、
起動している別のアプリを閉じるとか。。。
です。

jupyter nbconvert --to python で、pyファイルにして実行したときのエラーで無条件にコメントアウトして問題なかった行。(2個)

jupyter nbconvert --to python で、pyファイルにして実行したときのエラーで無条件にコメントアウトして問題なかった行。

無条件にコメントアウトして問題なかった行

-- d --

display

display(df.iloc[(one_indexes[0]-3):(one_indexes[0]+2), 0:5].head(n=5))

↓ printにするのが良い。

print(df.iloc[(one_indexes[0]-3):(one_indexes[0]+2), 0:5].head(n=5))

-- g --

get_ipython

get_ipython().run_line_magic('matplotlib', 'inline')

コメント

順次たします。
しかし、珍しいのは、10回に1回も出会わないはず。
「display⇒print」が示されていた。。。過去の自分に拍手。。。。

解決策。ImportError: cannot import name 'joblib' from 'sklearn.externals'

解決策。ImportError: cannot import name 'joblib' from 'sklearn.externals'

エラー内容

エラー

ImportError: cannot import name 'joblib' from 'sklearn.externals' 

エラー詳細

Traceback (most recent call last):
  File "CAN_Autoencoders_LSTM.py", line 19, in <module>
    from sklearn.externals import joblib
ImportError: cannot import name 'joblib' from 'sklearn.externals' (C:\Users\XYZZZ\AppData\Local\Programs\Python\Python37\lib\site-packages\sklearn\externals\__init__.py)

環境

windows10
sklearn 0.0 <--どういう意味?
Python 3.7.2

解決策

from sklearn.externals import joblib

↓ 置換え

import joblib

コメント

すみません、stackoverflowか何かをみました。どこか忘れました。

解決策。re.error: bad escape \s at position 0とか \z とか \p

解決策。re.error: bad escape \s at position 0とか \z とか \p

エラー

エラーの内容

re.error: bad escape \s at position 0
re.error: bad escape \z at position 0
re.error: bad escape \p at position 0

エラー詳細

Traceback (most recent call last):
  File "C:\Users\xyzzz\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 1021, in parse_template
    this = chr(ESCAPES[this][1])
KeyError: '\\p'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "re00.py", line 38, in <module>
    b = re.sub('y','\\p',a)
  File "C:\Users\xyzzz\AppData\Local\Programs\Python\Python37\lib\re.py", line 192, in sub
    return _compile(pattern, flags).sub(repl, string, count)
  File "C:\Users\xyzzz\AppData\Local\Programs\Python\Python37\lib\re.py", line 309, in _subx
    template = _compile_repl(template, pattern)
  File "C:\Users\xyzzz\AppData\Local\Programs\Python\Python37\lib\re.py", line 300, in _compile_repl
    return sre_parse.parse_template(repl, pattern)
  File "C:\Users\xyzzz\AppData\Local\Programs\Python\Python37\lib\sre_parse.py", line 1024, in parse_template
    raise s.error('bad escape %s' % this, len(this))
re.error: bad escape \p at position 0

環境

Python 3.7.2(windows10)

解決策

r と \ を加える。

b = re.sub('y',r'\\s',a)

補足

subの最初の引数側は、セーフ。(わけわからんというか、他の解説参照。)

b = re.sub('\s','y',a)

補足2

エラーとエラー対応後の様子を示すサンプルです。

import re

r'''
a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y','\s',a)
print(b)
# re.error: bad escape \s at position 0
'''

a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y',r'\\s',a)
print(b)
# x\szopqstu\x\\s\z\o\p\q\s\t


r'''
a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y','\z',a)
print(b)
# re.error: bad escape \z at position 0
'''

a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y',r'\\z',a)
print(b)
# x\zzopqstu\x\\z\z\o\p\q\s\t



r'''
a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y','\p',a)
print(b)
# re.error: bad escape \p at position 0
'''

a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('y',r'\\p',a)
print(b)
# x\pzopqstu\x\\p\z\o\p\q\s\t

a = r'xyzopqstu\x\y\z\o\p\q\s\t'
b = re.sub('\s','y',a)
print(b)
# xyzopqstu\x\y\z\o\p\q\s\t(こっちはセーフ)


補足3(2023/04/02)

↓このコードでエラー。

template_regex = re.sub(r'\\ +', r'\s+', template_regex)

エラー。↓

re.error: bad escape \s at position 0

これ↓でOK

template_regex = re.sub(r'\\ +', r'\\s+', template_regex)

補足(2023/09/10)

多少、この件、解読できたので、、、記事を書きました!!

keep-loving-python.hatenablog.com

コメント

アドバイスあれば、お願いします。
自分でコメントですが。。。この解決策の説明、良!