창을 figure라고 하는 것 같은데

openCV는 창을 명시하고 그릴 데이터를 지정한다면

openGL은 선택을 하고 그리는 거라 순서가 필요한데

matplotlib은 openGL 처럼 그릴곳을 선택하고 그리는 컨셉을 사용한 듯.

 

>>> plt.ion() # 인터랙티브모드 전환
<matplotlib.pyplot._IonContext object at 0x71521b249b40>
>>> plt.figure(1) # 여기서 Figure 1 이라는 창이 열림
<Figure size 640x480 with 0 Axes>
>>> plt.plot([1,2,3]) # Figure 1 창에 그래프 그려짐
[<matplotlib.lines.Line2D object at 0x7152194aead0>]
>>> plt.figure(2) # 여기서 Figure 2 이라는 창이 열림
<Figure size 640x480 with 0 Axes>
>>> plt.plot([2,3,4,5]) # Figure 2 창에 그래프 그려짐
[<matplotlib.lines.Line2D object at 0x71521a9c2410>]
>>> plt.figure(1) # UI 상으로 변동은 없으나 Figure 1 창에 그리도록 선택
<Figure size 640x480 with 1 Axes>
>>> plt.plot([2,3,4,5]) # Figure 1 창에 추가로 그려짐
[<matplotlib.lines.Line2D object at 0x71521a9eca30>]

[링크 : https://matplotlib.org/stable/gallery/subplots_axes_and_figures/multiple_figs_demo.html]

 

하나의 창 안에서 나누는건 subplot 인듯

[링크 : https://stackoverflow.com/questions/41210823/display-multiple-images-in-subplots]

Posted by 구차니

subplot을 생성하고 해도 되고

plt.plot() 으로 바로 한 것에 plt.cla() 해도 된다.

 

>>> fig, ax = plt.subplots()
>>> ax.plot([0,1,2,3,4,5])

>>> ax.clf()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'AxesSubplot' object has no attribute 'clf'. Did you mean: 'cla'?

>>> ax.cla()

[링크 : https://m.blog.naver.com/hsy2569/221814138095]

Posted by 구차니

linux 에서는 pulseaudio 쓰는 라이브러리가 유리하겠지?

[링크 : https://pypi.org/project/SoundCard/]

[링크 : https://soundcard.readthedocs.io/en/latest/]

 

Posted by 구차니

chatGPT 님 가라사대

재생 예제, 녹음 + fft 분석

import numpy as np
import sounddevice as sd

# 파라미터 설정
duration = 3  # 재생할 시간(초)
sampling_freq = 44100  # 샘플링 주파수 (Hz)
frequency = 440  # sine 파의 주파수 (Hz)

# 시간 배열 생성
t = np.linspace(0, duration, int(sampling_freq * duration), endpoint=False)

# sine 파 생성
sine_wave = np.sin(2 * np.pi * frequency * t)

# 사운드 재생
sd.play(sine_wave, samplerate=sampling_freq)
sd.wait()  # 재생이 끝날 때까지 대기
import numpy as np
import matplotlib.pyplot as plt
import sounddevice as sd
from scipy.fft import fft

# 녹음 파라미터 설정
duration = 5  # 녹음 시간 (초)
sampling_freq = 44100  # 샘플링 주파수 (Hz)

# 녹음 시작
print("녹음을 시작합니다...")
recorded_audio = sd.rec(int(duration * sampling_freq), samplerate=sampling_freq, channels=1)
sd.wait()  # 녹음이 끝날 때까지 대기
print("녹음이 완료되었습니다.")

# FFT를 위한 주파수 영역 생성
freq_axis = np.fft.fftfreq(len(recorded_audio), d=1/sampling_freq)

# FFT 계산
audio_fft = fft(recorded_audio.flatten())

# FFT 결과 그래프 표시
plt.figure(figsize=(10, 4))
plt.plot(freq_axis[:len(freq_axis)//2], np.abs(audio_fft)[:len(freq_axis)//2])
plt.title("FFT 분석 결과")
plt.xlabel("주파수 (Hz)")
plt.ylabel("Magnitude")
plt.grid(True)
plt.show()

[링크 : https://pypi.org/project/sounddevice/]

 

Assuming you have a NumPy array named myarray holding audio data with a sampling frequency of fs (in the most cases this will be 44100 or 48000 frames per second), you can play it back with play():
sd.play(myarray, fs)

[링크 : https://python-sounddevice.readthedocs.io/en/0.4.6/usage.html#playback]

 

duration = 10.5  # seconds
myrecording = sd.rec(int(duration * fs), samplerate=fs, channels=2)

[링크 : https://python-sounddevice.readthedocs.io/en/0.4.6/usage.html#recording]

 

[링크 : https://python-sounddevice.readthedocs.io/en/0.4.6/]

 

+

반복 재생

import soundfile as sf
import sounddevice as sd

weight = 1.4

data, fs = sf.read('sound.wav')
sd.play(data * weight, fs,loop=True)
sd.stop()

[링크 : https://stackoverflow.com/questions/47606214/stop-the-loop-in-sounddevice-audio-output]

Posted by 구차니

python 실행하기 위한 명령어 줄, 물론 pip 로 패키지도 없어서 그냥 깡통 python 상태

$ docker run --rm -it python python

[링크 : https://seorenn.github.io/note/docker-development-environment.html]

 

docker 로 장치연결해주기

docker run -ti -v /tmp/.X11-unix/:/tmp/.X11-unix --env QT_X11_NO_MITSHM=1 --device=/dev/video0:/dev/video0 -e DISPLAY=$DISPLAY --name test pytorch/pytorch:1.12.1-cuda11.3-cudnn8-devel /bin/bash

[링크 : https://shuka.tistory.com/68]

[링크 : https://blog.naver.com/cheeryun/222383212241]

 

$ docker run --rm -it python bash
# pip install opencv-python

[링크 : https://pypi.org/project/opencv-python/]

 

아래는 테스트 필요 + docker 내에서 해야하나 찾아보는 중

$ sudo apt install libgl1-mesa-glx libglib2.0-0

[링크 : https://yuevelyne.tistory.com/entry/OpenCV-ImportError-libGLso1-cannot-open-shared-object-file-No-such-file-or-directory]

 

wayland 예제 검색.. 

$ docker run -e XDG_RUNTIME_DIR=/tmp \
           -e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \
           -v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY  \
           --user=$(id -u):$(id -g) \
           imagename waylandapplication


[링크 : https://unix.stackexchange.com/questions/330366/]

 

ubuntu 22.04 인데 안된다. ㅠㅠ

Qt 쪽 변수를 넘겨줘야 하나?

>>> cv2.imshow("test",a)
qt.qpa.xcb: could not connect to display 
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/usr/local/lib/python3.12/site-packages/cv2/qt/plugins" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: xcb.

Aborted (core dumped)

 

패키지 깐다고 해결되면 행복은 하겠는데...

pip install PyQt5

[링크 : https://csm-kr.tistory.com/114]

'Programming > python(파이썬)' 카테고리의 다른 글

python soundcard 라이브러리  (0) 2024.05.21
python 사운드 장치  (0) 2024.05.10
python thread event  (0) 2024.03.05
cv2.ximgproc 없을 경우  (0) 2024.02.28
cv2.stereoBM + WLS  (0) 2024.02.28
Posted by 구차니

event.set()

event.wait() 로 쓰레드간 통신을 한다는데

그냥 busy wait일 것 같은 느낌..

추가로 찾아는 봐야겠다.

[링크 : https://infinity-infor-age.tistory.com/entry/python-inter-thread-comm]

'Programming > python(파이썬)' 카테고리의 다른 글

python 사운드 장치  (0) 2024.05.10
docker를 이용하여 python 에서 opencv 돌리기  (0) 2024.05.08
cv2.ximgproc 없을 경우  (0) 2024.02.28
cv2.stereoBM + WLS  (0) 2024.02.28
matplotlib animation  (0) 2024.02.28
Posted by 구차니

contrib 패키지를 설치해주면 해결!

오늘자 기준으로 한 63MB 정도 된다. 꽤나 큰 편 인 듯

$ python3 depth.py 
Traceback (most recent call last):
  File "/home/minimonk/src/DisparityMapfromStereoPair/depth.py", line 17, in <module>
    right_matcher = cv.ximgproc.createRightMatcher(left_matcher);
AttributeError: module 'cv2' has no attribute 'ximgproc'

$ pip install opencv-contrib-python

[링크 : https://stackoverflow.com/questions/57427233/module-cv2-cv2-has-no-attribute-ximgproc]

'Programming > python(파이썬)' 카테고리의 다른 글

docker를 이용하여 python 에서 opencv 돌리기  (0) 2024.05.08
python thread event  (0) 2024.03.05
cv2.stereoBM + WLS  (0) 2024.02.28
matplotlib animation  (0) 2024.02.28
pip 패키지 관리  (0) 2024.02.27
Posted by 구차니

matplotlib을 3d로 그려보는 것 까지 통합완료. 이제 SGBM만 해보면 될 듯

WLS 필터 미적용 WLS 필터 적용

 

 

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
imgL = cv.imread('tsukuba_l.png', cv.IMREAD_GRAYSCALE)
imgR = cv.imread('tsukuba_r.png', cv.IMREAD_GRAYSCALE)
max_disparity=16
stereo = cv.StereoBM_create(max_disparity, blockSize=15)
disparity = stereo.compute(imgL,imgR)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# X, Y 좌표 생성
height, width = imgL.shape
x = np.arange(0, width, 1)
y = np.arange(0, height, 1)
x, y = np.meshgrid(x, y)

# 깊이 맵을 사용하여 Z 좌표 생성
z = disparity

# 3D 그래프에 표시
ax.plot_surface(x, y, z, cmap='viridis')

plt.show()

# WLS 필터 적용
right_matcher = cv.ximgproc.createRightMatcher(stereo);
left_disp = stereo.compute(imgL, imgR);
right_disp = right_matcher.compute(imgR, imgL);

# Now create DisparityWLSFilter
wls_filter = cv.ximgproc.createDisparityWLSFilter(stereo);

sigma = 1.5
lmbda = 8000.0

wls_filter.setLambda(lmbda);
wls_filter.setSigmaColor(sigma);
filtered_disp = wls_filter.filter(left_disp, imgL, disparity_map_right=right_disp);

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

z = filtered_disp

# 3D 그래프에 표시
ax.plot_surface(x, y, z, cmap='viridis')

plt.show()

 

'Programming > python(파이썬)' 카테고리의 다른 글

python thread event  (0) 2024.03.05
cv2.ximgproc 없을 경우  (0) 2024.02.28
matplotlib animation  (0) 2024.02.28
pip 패키지 관리  (0) 2024.02.27
pyhthon numpy 생략없이 출력  (0) 2024.02.26
Posted by 구차니

 

 

[링크 : https://matplotlib.org/stable/api/animation_api.html]

 

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro')

def init():
    ax.set_xlim(0, 2*np.pi)
    ax.set_ylim(-1, 1)
    return ln,

def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,

ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
                    init_func=init, blit=True)
plt.show()

[링크 : https://pythonprogramming.net/python-matplotlib-live-updating-graphs/]

[링크 : https://stackoverflow.com/questions/11874767/how-do-i-plot-in-real-time-in-a-while-loop]

 

+ 2024.03.14

import cv2
import matplotlib.pyplot as plt

def grab_frame(cap):
    ret,frame = cap.read()
    return cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)

#Initiate the two cameras
cap1 = cv2.VideoCapture(0)
cap2 = cv2.VideoCapture(1)

#create two subplots
ax1 = plt.subplot(1,2,1)
ax2 = plt.subplot(1,2,2)

#create two image plots
im1 = ax1.imshow(grab_frame(cap1))
im2 = ax2.imshow(grab_frame(cap2))

plt.ion()

while True:
    im1.set_data(grab_frame(cap1))
    im2.set_data(grab_frame(cap2))
    plt.pause(0.2)

plt.ioff() # due to infinite loop, this gets never called.
plt.show()

[링크 : https://stackoverflow.com/questions/44598124/update-frame-in-matplotlib-with-live-camera-preview]

 

matplotlib.pyplot.ion()[source]
Enable interactive mode.

See pyplot.isinteractive for more details.

See also

ioff
Disable interactive mode.

isinteractive
Whether interactive mode is enabled.

show
Show all figures (and maybe block).

pause
Show all figures, and block for a time.

[링크 : https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.ion.html]

'Programming > python(파이썬)' 카테고리의 다른 글

cv2.ximgproc 없을 경우  (0) 2024.02.28
cv2.stereoBM + WLS  (0) 2024.02.28
pip 패키지 관리  (0) 2024.02.27
pyhthon numpy 생략없이 출력  (0) 2024.02.26
matplotlib grayscale image to 3d graph  (0) 2024.02.22
Posted by 구차니

pip도 아래 명령들을 이용하면 현재 패키지 버전들을 저정하고, 필요한 버전들을 설치할 수 있다.

python 프로젝트들이 나중에 버전이 꼬여서 난리나는거 보면

필수적인데 왜 다들 안쓸까..

 

pip list
pip freeze > requirements.txt

[링크 : https://intelloper.tistory.com/53]

 

pip install -r requirements.txt

[링크 : https://itholic.github.io/python-requirements/]

'Programming > python(파이썬)' 카테고리의 다른 글

cv2.stereoBM + WLS  (0) 2024.02.28
matplotlib animation  (0) 2024.02.28
pyhthon numpy 생략없이 출력  (0) 2024.02.26
matplotlib grayscale image to 3d graph  (0) 2024.02.22
python tcp 서버 예제  (0) 2024.01.22
Posted by 구차니