Ubuntu 22.04 OpenCVをVNCで表示

Ubuntu 22.04 OpenCVをVNCで表示

 ssh snowpool@192.168.1.69

でログイン

Opencvの処理をSSHで表示するには
ポートフォワーディングが必要

sudo vim /etc/ssh/sshd_config

X11Forwarding yes

となっているのを確認

一度ログアウト

ssh -X snowpool@192.168.1.69

とオプションに -X をつければOK

OpenCV については
既にソースからインストール済み

wget https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml


Haar Cascadeファイルの取得

次にpixcel8で自分の写真を撮影し
GoogleDrive へアップロード

これをubuntuに転送する

scp PXL_20231208_210913098.jpg-20231208T211055Z-001.zip snowpool@192.168.1.69:/home/snowpool/aw10s/

ファイル名が長いので変更

圧縮されているので

unzip PXL_20231208_210913098.jpg-20231208T211055Z-001.zip 

で解凍後

mv PXL_20231208_210913098.jpg image.jpg

でファイル名変更

あとは

vim face_recognition.py

でファイルを作成

import cv2

# 分類器の読み込み
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# 画像の読み込み
img = cv2.imread('image.jpg')

# グレースケール変換
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 顔の検出
faces = face_cascade.detectMultiScale(gray, 1.1, 4)

# 顔の周囲に枠を描画
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

# 結果の表示
cv2.imshow('img', img)
cv2.waitKey()
cv2.destroyAllWindows()

を保存し
実行したら

    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
SystemError: <class 'cv2.CascadeClassifier'> returned a result with an exception set

となる

原因は
https://qiita.com/hatorijobs/items/df2c8793509430f8d543
にあるように
githubのhaarcascade_frontalface_default.xmlをダウンロードして、読み込むとエラーになる。
そのため、公式サイトのhaarcascade_frontalface_default.xmlファイルをダウンロードして、
読み込んだら、成功
とのこと

結構chatgptだけだとヒントにはなるけどエラーが多い

普通に
ubuntu22.04 OpenCV 顔認識で検索し

https://techlog.mydns.jp/?p=417
を参考に
https://github.com/opencv/opencv/tree/master/data/haarcascades
から
haarcascade_eye.xml
haarcascade_frontalface_default.xml
をダウンロード

これをubuntu に転送する

scp haarcascade_*  snowpool@192.168.1.69:/home/snowpool/aw10s/

そして

pip install opencv-python

でライブラリインストール

vim kao.py

でファイルを作成

import cv2
import time

# Haar Cascade分類器の読み込み
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

# Webカメラの設定
cap = cv2.VideoCapture(0)  # 0番目のカメラを使用する場合

# 最後の顔検出時刻
lastTime = None

# メインループ
while True:


    # カメラからのフレームの取得
    ret, frame = cap.read()
    
    # フレームのグレースケール化
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    
    # 顔の検出
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    
    # 検出された顔、目、鼻、口に矩形を描画
    for (x, y, w, h) in faces:
        # 検出自の処理(検出から1分たったら再度イベント動かす
        if lastTime is None or time.perf_counter() - lastTime > 60:
            # 検出時刻更新
            lastTime = time.perf_counter()
            print("人間発見、警戒せよw")
            
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = frame[y:y+h, x:x+w]
        # 以下は目もマークする場合
        # eyes = eye_cascade.detectMultiScale(roi_gray)
        # for (ex, ey, ew, eh) in eyes:
        #     cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (255, 0, 0), 2)

    
    # 結果の表示
    cv2.imshow('Facial Feature Detection', frame)
    
    # 終了のキー入力
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 後処理
cap.release()
cv2.destroyAllWindows()

これで実行したけど

[ WARN:0@0.046] global cap_v4l.cpp:982 open VIDEOIO(V4L2:/dev/video0): can't open camera by index
[ WARN:0@0.046] global obsensor_stream_channel_v4l2.cpp:82 xioctl ioctl: fd=-1, req=-2140645888
[ WARN:0@0.046] global obsensor_stream_channel_v4l2.cpp:138 queryUvcDeviceInfoList ioctl error return: 9
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:82 xioctl ioctl: fd=-1, req=-2140645888
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:138 queryUvcDeviceInfoList ioctl error return: 9
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:82 xioctl ioctl: fd=-1, req=-2140645888
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:138 queryUvcDeviceInfoList ioctl error return: 9
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:82 xioctl ioctl: fd=-1, req=-2140645888
[ WARN:0@0.047] global obsensor_stream_channel_v4l2.cpp:138 queryUvcDeviceInfoList ioctl error return: 9
[ERROR:0@0.047] global obsensor_uvc_stream_channel.cpp:156 getStreamChannelGroup Camera index out of range
Traceback (most recent call last):
  File "/home/snowpool/aw10s/kao.py", line 22, in <module>
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.8.0) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

となる

とりあえずリモートでopencvからやる

import cv2
bgr = cv2.imread(‘image.jpg')
cv2.imshow("", bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()

vim test_opencv.py

として保存

https://www.kkaneko.jp/tools/ubuntu/opencv.html
を参考に実行

しかし

 bgr = cv2.imread('image,jpg')
[ WARN:0@168.990] global loadsave.cpp:248 findDecoder imread_('image,jpg'): can't open/read file: check file path/integrity
>>> 

となる

pyenvのPythonと組み合わせるOpenCVのビルド: Ubuntu-22.04編
を参考に

#!/usr/bin/env python

import os
import sys
sys.path.insert(0, f"{os.environ['HOME']}/dev-root/opencv4/lib/python3.11/site-packages")
import cv2

print(cv2.__version__)

を実行したら

4.8.0

となるので
これは問題ないみたい

https://www.kkaneko.jp/tools/ubuntu/opencv.html
を参考に

import cv2
bgr = cv2.imread('fruits.jpg')
cv2.imshow("", bgr)

まで実行すると

cv2.error: OpenCV(4.8.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'

となる

これを検索すると
https://qiita.com/tik26/items/a75e03e523926cd2f059
にそれらしいものがあったので
一度OpenCV をアンインストール

sudo apt update
sudo apt install -y libgtk2.0-dev pkg-config

pip3 install opencv-python

今度は

qt.qpa.xcb: could not connect to display 
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "/home/snowpool/.local/lib/python3.10/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.

中止 (コアダンプ)

となる

エラーメッセージを検索すると
QtとOpenCVの両方をインストールするとエラーが発生する[Python]
https://blog.nplpl.com/421
によれば
どうやら双方にGUI機能が含まれているから競合しているらしいので
opencv-python をアンインストール
GUI機能を含まない、OpenCVのヘッドレス版をインストール
でOKらしい

pip uninstall -y opencv-python
pip3 install opencv-python-headless

今度は

cv2.error: OpenCV(4.8.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'

となる

https://keep-loving-python.hatenablog.com/entry/2023/02/05/110149
によれば

python -m pip install opencv-python==4.6.0.66 --force-reinstall

というように

--force-reinstall 

すればOKらしいが
その前に一度cmake をもう一度やってからにしてみる

とりあえずパスを調べる
ChatGPT によれば

import cv2
print(cv2.__file__)


Pythonでインストールされている場合のパスが出る
/usr/local/lib/python3.10/dist-packages/cv2/__init__.py

次にapt などの場合

sudo dpkg -L libopencv-dev

で表示

/.
/usr
/usr/bin
/usr/bin/opencv_annotation
/usr/bin/opencv_interactive-calibration
/usr/bin/opencv_model_diagnostics
/usr/bin/opencv_version
/usr/bin/opencv_visualisation
/usr/bin/opencv_waldboost_detector
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/cmake
/usr/lib/x86_64-linux-gnu/cmake/opencv4
/usr/lib/x86_64-linux-gnu/cmake/opencv4/OpenCVConfig-version.cmake
/usr/lib/x86_64-linux-gnu/cmake/opencv4/OpenCVConfig.cmake
/usr/lib/x86_64-linux-gnu/cmake/opencv4/OpenCVModules-release.cmake
/usr/lib/x86_64-linux-gnu/cmake/opencv4/OpenCVModules.cmake
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/opencv4.pc
/usr/share
/usr/share/doc
/usr/share/doc/libopencv-dev
/usr/share/doc/libopencv-dev/copyright
/usr/share/licenses
/usr/share/licenses/opencv4
/usr/share/licenses/opencv4/SoftFloat-COPYING.txt
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/opencv_createsamples.1.gz
/usr/share/man/man1/opencv_haartraining.1.gz
/usr/share/man/man1/opencv_performance.1.gz
/usr/share/man/man1/opencv_traincascade.1.gz
/usr/share/doc/libopencv-dev/changelog.Debian.gz

確かソースビルドのはず


メモを見たが
https://www.kkaneko.jp/tools/ubuntu/ubuntu_opencv.html#S1
にあるようなログ
つまり
Make のオプションがhistoryコマンドで出ない
つまりpythonでは入っているが
Make して入っていないようだ

次にVNC接続し実験

ubuntuで

tigervncserver -xstartup /usr/bin/gnome-session -geometry 800x600 -localhost no :1 

を実行後

Mac の場合
Finder から
移動 > サーバーに接続で
vnc://192.168.1.69:5901
で接続

すると

import cv2
bgr = cv2.imread('fruits.jpg')
cv2.imshow("", bgr)

まで実行すると

Failed to load module "canberra-gtk-module"

とエラーが変わる

これを検索

OpenCVを実行するとでてくるFailed to load module “canberra-gtk-module”というエラーの対処法
によれば

sudo apt-get install libcanberra-gtk*

でOK

これで
再度

import cv2
bgr = cv2.imread('fruits.jpg')
cv2.imshow("", bgr)
waitKey(0)

でフルーツ画像が表示される

消すには

cv2.destroyAllWindows()

を実行

とりあえずVNCではできるけど
Ssh Xポートフォワーディングでやるのは今は無理っぽいのがわかった

現在地の明日の天気を取得

現在地の明日の天気を取得

毎回アレクサで聴くのは面倒なので
部屋に入った時、顔認識したら明日の天気を知らせるようにする

夜なら明日の天気
朝なら今日の天気とする

なので音声合成と画像認識、顔認識ができればOK

とりあえず明日の天気の取得をする

とりあえずChatGPT で調べる

Weather APIを使うようなので

無料で使える天気API「Free Weather API」の利用登録とキー発行手順
を参考に

https://www.weatherapi.com/signup.aspx
から登録しようとしたら
502 Bad Gateway
となるので

OpenWeatherMapAPI
を使うことにする

openweathermap.orgのAPIを使って天気表示

天候・気温予測サービス “OpenWeather” のAPIを活用する
を参考に

まずはAPI key の取得

https://home.openweathermap.org/users/sign_up
からできる

規約には
We will use information you provided for management and administration purposes, and for keeping you informed by mail, telephone, email and SMS of other products and services from us and our partners. You can proactively manage your preferences or opt-out of communications with us at any time using Privacy Centre. You have the right to access your data held by us or to request your data to be deleted. For full details please see the OpenWeather Privacy Policy.

I am 16 years old and over
I agree with Privacy Policy, Terms and conditions of sale and Websites terms and conditions of use

I consent to receive communications from OpenWeather Group of Companies and their partners:

System news (API usage alert, system update, temporary system shutdown, etc)
Product news (change to price, new product features, etc)
Corporate news (our life, the launch of a new service, etc)

日本語にすると
当社は、お客様から提供された情報を管理および管理の目的で使用し、また当社および当社のパートナーからの他の製品やサービスについて郵便、電話、電子メール、SMS でお客様に通知し続けるために使用します。お客様は、プライバシー センターを使用して、いつでも自分の設定を積極的に管理したり、当社とのコミュニケーションをオプトアウトしたりできます。あなたには、当社が保有する自分のデータにアクセスする権利、または自分のデータの削除を要求する権利があります。詳細については、OpenWeather プライバシー ポリシーをご覧ください。

私は16歳以上です
プライバシー ポリシー、販売条件、およびウェブサイトの利用条件に同意します
私は、OpenWeather Group of Companies およびそのパートナーからの連絡を受け取ることに同意します。

システムニュース(API使用状況のアラート、システムアップデート、システムの一時シャットダウンなど)
製品ニュース(価格変更、新製品特長など)
企業ニュース(私たちの生活、新サービスの開始など)

登録しようとしたら
既に去年登録していた….

キーは
Gmailに送られていてた

これを元に
https://qiita.com/K_Nemoto/items/51e124b3628106c6ef0a#apiを活用する
を参考に

import requests
import json
from pprint import pprint
url = “https://api.openweathermap.org/data/2.5/weather?zip={zip_place}&units=metric&appid={API_key}”
# xxxxx
url = url.format(zip_place = “任意の郵便番号,JP”, API_key = “取得したAPIキー”)

jsondata = requests.get(url).json()
pprint(jsondata)

print(“天気:”,jsondata[“weather”][0][“main”])
print(“天気詳細:”,jsondata[“weather”][0][“description”])

print(“都市名:”,jsondata[“name”])
print(“気温:”,jsondata[“main”][“temp”])
print(“体感気温:”,jsondata[“main”][“feels_like”])
print(“最低気温:”,jsondata[“main”][“temp_min”])
print(“最高気温:”,jsondata[“main”][“temp_max”])
print(“気圧:”,jsondata[“main”][“pressure”])
print(“湿度:”,jsondata[“main”][“humidity”])

print(“風速:”,jsondata[“wind”][“speed”])
print(“風の方角:”,jsondata[“wind”][“deg”])

で実行すると

{‘base’: ‘stations’,
‘clouds’: {‘all’: 0},
‘cod’: 200,
‘coord’: {‘lat’: 緯度, ‘lon’: 経度},
‘dt’: 1701631236,
‘id’: 0,
‘main’: {‘feels_like’: 4.12,
‘humidity’: 60,
‘pressure’: 1021,
‘temp’: 6.65,
‘temp_max’: 6.65,
‘temp_min’: 6.65},
‘name’: ‘Kawai’,
‘sys’: {‘country’: ‘JP’,
‘id’: 2008260,
‘sunrise’: 1701639567,
‘sunset’: 1701675443,
‘type’: 2},
‘timezone’: 32400,
‘visibility’: 10000,
‘weather’: [{‘description’: ‘clear sky’,
‘icon’: ’01n’,
‘id’: 800,
‘main’: ‘Clear’}],
‘wind’: {‘deg’: 288, ‘gust’: 5.36, ‘speed’: 3.58}}
天気: Clear
天気詳細: clear sky
都市名: Kawai
気温: 6.65
体感気温: 4.12
最低気温: 6.65
最高気温: 6.65
気圧: 1021
湿度: 60
風速: 3.58
風の方角: 288

となり入力した郵便番号の今日の天気が出る

とりあえず目的は今日、明日の天気の取得

他にも三時間ごとの天気とかもあるけど
今は不要
後々サーバー作って手持ちのスマホとかのGPSとリンクして
現在地の三時間ごとの天気で雨とか霧が出るなら注意とか
移動予定のところで滞在時間内に雨になりそうなら表示する感じか

パラメータとしては
https://hibi-update.org/other/openweathermap-api/
がわかりやすい

次に現在地のものを調べてみた

https://qiita.com/iwasan06/items/94db02186b17bf2d09fc
にあるけど
.erb なのでこれはrailsコード

位置情報取得にはGCPを使ってるが高いので別のものにする

https://zenn.dev/amuro/articles/96f61aff90e9da
にはスマホアプリへの現在地の実装方法が載ってるけど
今じゃない

https://note.com/ai_frontline/n/na22bd0ed7870
だとCHAT GPTと組み合わせだけど
それじゃない

むしろ
https://3pysci.com/openweathermap-5/
によれば

https://api.openweathermap.org/data/2.5/onecall?lat=
{lat}&lon={lon}&exclude={part}&appid={API key}

 となっているので

https://api.openweathermap.org/data/2.5/onecall?lat=33.44&lon=-94.04&appid={API key}

というように
緯度経度とAPI key があれば可能らしい
これなら現在地で取得可能

ということで
Pythonで現在地の緯度経度を取得するコードを作る

しかし考えた結果、現在地取得は不要
自宅の今日あすの天気と移動さきは移動さきの地名を入れるので
緯度経度で出すことはほぼない

次はopencv関連をやる

YouTube live カメラ動画をopencvで表示

YouTube live カメラ動画をopencvで表示

静岡県の薩埵峠のyoutubeライブ画像をopencv で表示する

当初は

YouTube動画をOpenCVでキャプチャするスクリプト
を参考に実行したがエラーとなる

YouTubeのライブ配信をOpenCVで再生する
も同様にエラーとなる

ChatGpt で
opencv でYouTubeライブカメラの画像を表示するPythonコード
を表示し実行したが
これもエラー

ERROR: Unable to extract uploader id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
Traceback (most recent call last):
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 815, in wrapper
    return func(self, *args, **kwargs)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 836, in __extract_info
    ie_result = ie.extract(url)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/extractor/common.py", line 534, in extract
    ie_result = self._real_extract(url)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/extractor/youtube.py", line 1794, in _real_extract
    'uploader_id': self._search_regex(r'/(?:channel|user)/([^/?&#]+)', owner_profile_url, 'uploader id') if owner_profile_url else None,
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/extractor/common.py", line 1012, in _search_regex
    raise RegexNotFoundError('Unable to extract %s' % _name)
youtube_dl.utils.RegexNotFoundError: Unable to extract uploader id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/snowpool/aw10s/youtuvelive.py", line 36, in <module>
    display_youtube_stream(youtube_url)
  File "/Users/snowpool/aw10s/youtuvelive.py", line 11, in display_youtube_stream
    info_dict = ydl.extract_info(url, download=False)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 808, in extract_info
    return self.__extract_info(url, ie, download, extra_info, process)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 824, in wrapper
    self.report_error(compat_str(e), e.format_traceback())
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 628, in report_error
    self.trouble(error_message, tb)
  File "/Users/snowpool/.pyenv/versions/3.10.6/lib/python3.10/site-packages/youtube_dl/YoutubeDL.py", line 598, in trouble
    raise DownloadError(message, exc_info)
youtube_dl.utils.DownloadError: ERROR: Unable to extract uploader id; please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.

となる

youtube_dlライブラリがYouTubeのビデオからアップローダーIDを抽出することができない
で検索

Pythonのパッケージyoutube_dlで、DownloadErrorが発生する。

を参考に

pip install yt-dlp

でインストールし

import youtube_dl

の代わりに

from yt_dlp import YoutubeDL

でインポート

import cv2
import youtube_dl
from yt_dlp import YoutubeDL


def display_youtube_stream(url):
    ydl_opts = {
        'format': 'best[ext=mp4]',  # mp4 format, you can change this to other formats
        'quiet': True,
    }

    with YoutubeDL() as ydl:
        info_dict = ydl.extract_info(url, download=False)
        video_url = info_dict['url']

    cap = cv2.VideoCapture(video_url)

    if not cap.isOpened():
        print("Error: Could not open stream.")
        exit()

    while True:
        ret, frame = cap.read()
        if not ret:
            print("Failed to grab frame.")
            break

        cv2.imshow('YouTube Live Stream', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

# Replace with your YouTube live stream URL
youtube_url = 'https://www.youtube.com/watch?v=6S4qvf97cbQ'
display_youtube_stream(youtube_url)

として保存

これで実行すると
YouTube live画像が表示されます

なお表示しているのは
LIVE】静岡市さった峠 交通の要衝

Ubuntu22.04 VNCサーバー

Ubuntu22.04 VNCサーバー

クライアントとしてMacから接続なので
RealVNC を使う

最初にVNCで接続確認できたら
SSHトンネルで接続できるようにする

Ubuntu インストール時にGNOMEデスクトップが入っているので
https://ja.linux-console.net/?p=3414#gsc.tab=0
を参考に

VNC用のユーザ作成し
TigerVNC サーバーのインストールをする

とりあえずユーザ名snow作成してパスワード設定

sudo useradd -m -s /bin/bash snow
sudo passwd snow

次に作成したユーザをグループsudo に追加
これでroot権限が使える用になる

sudo usermod -aG sudo snow

次に作成したユーザに切り替え
Sudo su でroot権限になれるか確認

su - snow
sudo su

で root になれてるなら成功

これで一度ユーザを元に戻すdのえ
ctrl+ d を2回行ってログアウトしておく

元々のユーザに戻ったら
TigerVNC サーバーのインストール

sudo apt install tigervnc-standalone-server tigervnc-common tigervnc-tools

次にVNCの初期化
これはvncユーザのアカウントで行うので

su - snow

で切り替える

そしてVNCサーバの初期化

vncserver

パスワードを設定するけど
8文字が最大なので注意

Would you like to enter a view-only password (y/n)? 


VNC サーバーまたはセッションを、表示のみの権限を持つ別のユーザーと共有
なので
N
にする

A view-only password is not used
/usr/bin/xauth:  file /home/snow/.Xauthority does not exist

New Xtigervnc server 'snowpool-Prime-Series:1 (snow)' on port 5901 for display :1.
Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/snow/.vnc/passwd :1 to connect to the VNC server.


=================== tail /home/snow/.vnc/snowpool-Prime-Series:5901.log ===================
Terminated
X connection to :1 broken (explicit kill or server shutdown).

Fri Sep 29 06:21:47 2023
 ComparingUpdateTracker: 0 pixels in / 0 pixels out
 ComparingUpdateTracker: (1:-nan ratio)
Killing Xtigervnc process ID 38401... success!
===========================================================================================

Session startup via '/etc/X11/Xtigervnc-session' cleanly exited too early (< 3 seconds)!

Maybe try something simple first, e.g.,
	tigervncserver -xstartup /usr/bin/xterm
The Xtigervnc server cleanly exited!
The X session cleanly exited!

となる

次にこのVNCを強制終了し
起動スクリプトの構成開始

一度ログアウトしていたので

vncserver -kill snowpool-Prime-Series:1 
vncserver: No matching VNC server running for this user!

現在動いていないみたいなので

vim ~/.vnc/xstartup

で設定ファイルを作成

#!/bin/sh
# Start up the standard system desktop
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
/usr/bin/startxfce4
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
x-window-manager &

として保存

chmod +x ~/.vnc/xstartup

で実行権限付与

次に
VNC ユーザーを TigerVNC サーバー構成ファイルに追加して定義

sudo vim /etc/tigervnc/vncserver.users 


最終行に

:1=snow

を追記して保存

次にVNCサーバ起動

 sudo systemctl start snowpool-Prime-Series:1 service

で実行したが

Failed to start snowpool-Prime-Series:1.service: Unit snowpool-Prime-Series:1.service not found.
Failed to start service.service: Unit service.service not found.

となる

もしかしてx window systemがだめ?

とりあえずログを調べる

cd .vnc/
ls -lah

結果は

drwxr-xr-x 2 snow snow 4.0K  9月 30 05:53 .
drwxr-x--- 5 snow snow 4.0K  9月 30 05:53 ..
-rw------- 1 snow snow    8  9月 29 06:21 passwd
-rw-rw-r-- 1 snow snow 1022  9月 29 06:21 snowpool-Prime-Series:5901.log
-rwxrwxr-x 1 snow snow  243  9月 30 05:38 xstartup

となる

cat snowpool-Prime-Series\:5901.log

で中身を確認

Xvnc TigerVNC 1.12.0 - built 2022-03-25 17:06
Copyright (C) 1999-2021 TigerVNC Team and many others (see README.rst)
See https://www.tigervnc.org for information on TigerVNC.
Underlying X server release 12101003, X.Org


Fri Sep 29 06:21:46 2023
 vncext:      VNC extension running!
 vncext:      Listening for VNC connections on local interface(s), port 5901
 vncext:      created VNC server for screen 0
[mi] mieq: warning: overriding existing handler (nil) with 0x55648c8a9400 for event 2
[mi] mieq: warning: overriding existing handler (nil) with 0x55648c8a9400 for event 3
3NI3X0 New Xtigervnc server 'snowpool-Prime-Series:1 (snow)' on port 5901 for display :1.
3NI3X0 Use xtigervncviewer -SecurityTypes VncAuth -passwd /home/snow/.vnc/passwd :1 to connect to the VNC server.
Terminated
X connection to :1 broken (explicit kill or server shutdown).

Fri Sep 29 06:21:47 2023
 ComparingUpdateTracker: 0 pixels in / 0 pixels out
 ComparingUpdateTracker: (1:-nan ratio)
Killing Xtigervnc process ID 38401... success!

とりあえず
https://www.server-world.info/query?os=Ubuntu_22.04&p=desktop&f=1
を参考に

sudo apt -y install ubuntu-desktop task-gnome-desktop


GNOMEデスクトップ環境をインストール

tigervncserver -xstartup /usr/bin/gnome-session --geometry 800x600 -localhost no :1 

としたけどダメ

とりあえずユーザを通常のユーザに戻して

tigervncserver -xstartup /usr/bin/gnome-session -geometry 800x600 -localhost no :1 

を実行したらできた

https://ebi-works.com/mac-vnc/#outline__4_1
を参考に
Mac の場合
Finder から
移動 > サーバーに接続で
vnc://192.168.1.69:5901
で接続

しかし認証エラーとなってログイン画面は出るけど
ログインができない

本体から操作しようとしたが
画面が真っ黒で操作不能

一度

sudo reboot

で再起動し
本体でログインしてみると
操作ができるけど
今度はVNC接続ができない

とりあえずもう一回SSHでログインして

sudo reboot

で再起動

A X11 server is already running for display :1

で検索し
https://www.bigbang.mydns.jp/vnc-server-x.htm
によれば
VNCで接続した状態(ログアウトしたままの状態)で直接コンソール画面からログインしようとすると、真っ黒な画面のまま表示されません
 これを解消するには、VNC接続している画面でログアウトする必要がある
とのこと

一度再起動してから端末から

 tigervncserver -xstartup /usr/bin/gnome-session -geometry 800x600 -localhost no :1 

とすれば
接続でき
操作もできるようになった

ただし放置してロック画面になると
パスワード入力ができないため
現状では一度再起動して対処

FirefoxはなぜかVNCで起動できなかった
Libreoffice calcなどは問題なく使用可能

とりあえず

 tigervncserver -xstartup /usr/bin/gnome-session -geometry 800x600 -localhost no :1 

で起動し
Finderから
移動 > サーバーへ移動

vnc://192.168.1.69:5901
で接続

パスワードをVNCパスワードを入力すれば
VNCでgnomeデスクトップでログインできる

念の為使わない時にはログアウトしておけば
認証エラーのGUI画面にならずに済むし
自動的にVNCも停止する

Permission denied (publickey).の解決

snowpool@192.168.1.69: Permission denied (publickey).の解決

GithubへSSHでキーを登録するため

ssh-keygen -t ed25519 -C “メールアドレス”

でパスフレーズ付きで作成

前回ubuntu22.04 でキーを作成した時のログは

ssh-keygen -t ed25519 -C ""

多分キーを上書きしている

仕方ないので

ssh-keygen -t ed25519 -C "" -f ~/.ssh/ubuntu22


ファイル名を変えて再度鍵を生成する
これで

-t ed25519: キーペアのタイプをEd25519に指定します。

-C “”: キーペアに空のコメントを付加します。

-f ~/.ssh/ubuntu22: キーペアのファイル名と保存場所を指定します。
このオプションで、秘密キーが~/.ssh/ubuntu22に、
対応する公開キーが~/.ssh/ubuntu22.pubにそれぞれ保存されます。

となったので
次にubuntu22.04 へログインして一度SSHをパスワード接続できるようにする

しかし結果が変わらない
Mac側の設定を変更する

 vim .ssh/known_hosts    


Ubuntu22.04のIPアドレスを検索し削除

再度接続しようとしたが
失敗のためよく見たら
ssh_configを設定していた…
正解は sshd_config

これを編集しパスワード認証したら入れたので

ssh-copy-id -i ~/.ssh/ubuntu22.pub snowpool@192.168.1.69

あとは

 chmod 600 .ssh/ubuntu22    

で権限を変更

sudo vim /etc/ssh/sshd_config

で設定ファイルを開き
パスワード認証を許可しないようにして

sudo systemctl restart sshd.servic

でSSHD再起動

ssh -i .ssh/ubuntu22 snowpool@192.168.1.69  

というように鍵を指定してSSHで接続することで
無事に解決

Ubuntu22.04 で ラズパイゼロWからのダイレクト TCP ストリーミングでの配信されている画像を OpenCV で再生 その2

Ubuntu22.04 で ラズパイゼロWからのダイレクト TCP ストリーミングでの配信されている画像を OpenCV で再生 その2

今回は今後に必要なパッケージ関連のインストール

https://pytorch.org/get-started/locally/

PyTorch Build Stable
Your OS Linux
Package pip
Language Python
Compute Platform CPU
を選択すると

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

が表示されるので
これを sudo をつけて実行する

sudo pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

これでインストール後に

python3 -c "import torch; print( torch.__version__ )"

2.0.1+cpu

というようにバージョンがでれば成功

次に機械学習フレームワークのChainerインストールを入れようとしたけど
GPUないので断念

次にpythonパッケージ関連

sudo apt -y update
sudo apt -y install libgeographic-dev gdal-bin gdal-data libgdal-dev

sudo apt -y install python3-numpy python3-scipy python3-h5py python3-sklearn python3-skimage python3-seaborn python3-pandas python3-pil cython3 python3-pytest python3-yaml cython3 python3-statsmodels python3-plotly python3-sympy python3-csvkit python3-docopt python3-pyproj python3-flake8 python3-protobuf python3-bs4 python3-html5lib python3-rope python3-wrapt python3-cffi python3-wheel python3-six python3-sphinx python3-bottleneck python3-pygments python3-numexpr python3-xlrd python3-xlwt python3-lxml python3-graphviz python3-pydot python3-flask python3-django python3-redis python3-pylint-common python3-bz2file python3-opengl  python3-msgpack python3-mecab python3-matplotlib-venn python3-pygame python3-bottle python3-rtree python3-shapely python3-fiona python3-gdal python3-geopandas python3-geopy python3-geographiclib python3-requests

を実行したが

E: パッケージ python3-bz2file が見つかりません

となる

なので

sudo apt -y install python3-numpy python3-scipy python3-h5py python3-sklearn python3-skimage python3-seaborn python3-pandas python3-pil cython3 python3-pytest python3-yaml cython3 python3-statsmodels python3-plotly python3-sympy python3-csvkit python3-docopt python3-pyproj python3-flake8 python3-protobuf python3-bs4 python3-html5lib python3-rope python3-wrapt python3-cffi python3-wheel python3-six python3-sphinx python3-bottleneck python3-pygments python3-numexpr python3-xlrd python3-xlwt python3-lxml python3-graphviz python3-pydot python3-flask python3-django python3-redis python3-pylint-common python3-opengl  python3-msgpack python3-mecab python3-matplotlib-venn python3-pygame python3-bottle python3-rtree python3-shapely python3-fiona python3-gdal python3-geopandas python3-geopy python3-geographiclib python3-requests

で実行

その後

sudo pip3 install -U pandasql pyyaml bokeh pymc3 mkl mkl-include holoviews pandas-bokeh ggplot prettyplotlib pybrain3 firebase-admin googletrans google-cloud-vision gpyocr azure-cognitiveservices-vision-computervision gensim gloo scikit-video scikits.datasmooth scikits.example scikits.fitting scikits.optimization scikits.vectorplot zodb gdata pyr2 pycaret

を実行するが

Collecting gpyocr
  Downloading gpyocr-1.6.tar.gz (10 kB)
  Preparing metadata (setup.py) ... error
  error: subprocess-exited-with-error
  
  × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [10 lines of output]
      Traceback (most recent call last):
        File "<string>", line 2, in <module>
        File "<pip-setuptools-caller>", line 34, in <module>
        File "/tmp/pip-install-n3wh9blx/gpyocr_6b1e72dbc11046ffb50fbda9785e8f40/setup.py", line 3, in <module>
          from gpyocr import __version__
        File "/tmp/pip-install-n3wh9blx/gpyocr_6b1e72dbc11046ffb50fbda9785e8f40/gpyocr/__init__.py", line 9, in <module>
          from ._gpyocr import (
        File "/tmp/pip-install-n3wh9blx/gpyocr_6b1e72dbc11046ffb50fbda9785e8f40/gpyocr/_gpyocr.py", line 24, in <module>
          from google.cloud import vision
      ImportError: cannot import name 'vision' from 'google.cloud' (unknown location)
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

となる

とりあえず他のものをインストール

sudo pip3 install git+https://github.com/jrosebr1/imutils.git
python3 -c "import imutils; print(imutils.__version__)"

でバージョン確認

0.5.4
sudo pip3 install git+https://github.com/DinoTools/python-overpy.git
python3 -c "import overpy; print(overpy.__version__)"

でバージョン確認

0.6
sudo pip3 install git+https://github.com/ianare/exif-py.git
python3 -c "import exifread; print(exifread.__version__)"

でバージョン確認

3.1.0
sudo pip3 install git+https://github.com/mapado/haversine.git
sudo pip3 install git+https://github.com/Turbo87/utm.git

次に
folium, pyproj, rtree, shapely, GDAL, fiona, geopandas のインストール

sudo apt -y update
cd /usr/local
sudo rm -rf geopandas
sudo git clone https://github.com/geopandas/geopandas
cd geopandas
sudo python3 setup.py build
sudo python3 setup.py build

を実行すると

Failed to load config from /usr/local/geopandas/pyproject.toml: 'versioneer'
Try to load it from setup.cfg
running build

となる

それでも

sudo python3 setup.py install

を実行すると

Failed to load config from /usr/local/geopandas/pyproject.toml: 'versioneer'
Try to load it from setup.cfg
running install
/usr/lib/python3/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
  warnings.warn(
/usr/lib/python3/dist-packages/setuptools/command/easy_install.py:158: EasyInstallDeprecationWarning: easy_install command is deprecated. Use build and pip and other standards-based tools.
  warnings.warn(
running bdist_egg
running egg_info
creating geopandas.egg-info
writing geopandas.egg-info/PKG-INFO
writing dependency_links to geopandas.egg-info/dependency_links.txt
writing top-level names to geopandas.egg-info/top_level.txt
writing manifest file 'geopandas.egg-info/SOURCES.txt'
reading manifest file 'geopandas.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
adding license file 'LICENSE.txt'
writing manifest file 'geopandas.egg-info/SOURCES.txt'
Failed to load config from /usr/local/geopandas/pyproject.toml: 'versioneer'
Try to load it from setup.cfg
installing library code to build/bdist.linux-x86_64/egg
running install_lib
warning: install_lib: 'build/lib' does not exist -- no Python modules to install

creating build
creating build/bdist.linux-x86_64
creating build/bdist.linux-x86_64/egg
creating build/bdist.linux-x86_64/egg/EGG-INFO
copying geopandas.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO
copying geopandas.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying geopandas.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying geopandas.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating dist
creating 'dist/geopandas-0.14.0+1.g91d1889-py3.10.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing geopandas-0.14.0+1.g91d1889-py3.10.egg
Copying geopandas-0.14.0+1.g91d1889-py3.10.egg to /usr/local/lib/python3.10/dist-packages
Adding geopandas 0.14.0+1.g91d1889 to easy-install.pth file

Installed /usr/local/lib/python3.10/dist-packages/geopandas-0.14.0+1.g91d1889-py3.10.egg
Processing dependencies for geopandas==0.14.0+1.g91d1889
Finished processing dependencies for geopandas==0.14.0+1.g91d1889

となるのでインストールできているっぽい

sudo pip3 install -q git+https://github.com/python-visualization/folium.git

次にpyenv のインストール
既にインストール済み

念の為ライブラリ関連も入れておく予定だったが
インストール済みだった

udo apt -y install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

Ubuntu22.04 で ラズパイゼロWからのダイレクト TCP ストリーミングでの配信されている画像を OpenCV で再生 その1

Ubuntu22.04 で
ラズパイゼロWからのダイレクト TCP ストリーミングでの配信されている画像を
OpenCV
で再生する

VOICEVOX REST-APIを使えるようにする

とりあえずOpenCV から入れる

https://monobook.org/wiki/Ubuntu_22.04_LTSにVoiceVoxをインストールする
でvoiceboxを入れる

sudo apt install fuse libfuse2

を入れておく

https://voicevox.hiroshiba.jp
から
OS Linux
対応モード CPU
インストーラタイプをダウンロード

cd Downloads
scp VOICEVOX-CPU.Installer.0.14.7.Linux.sh snowpool@192.168.1.69:/home/snowpool/

でM1MacbookAir からscp で転送する

bash VOICEVOX-CPU.Installer.0.14.7.Linux.sh 

を実行したが

* curl コマンドが見つかりません。

以下のコマンドを実行してください。

Ubuntu/Debian:
    sudo apt install curl

CentOS/Fedora:
    sudo dnf install curl
もしくは
    sudo yum install curl

となるので

sudo apt install curl

の後に実行したら

+-+-+-+-+-+-+-+-+
|V|O|I|C|E|V|O|X|
+-+-+-+-+-+-+-+-+-+-+-+-+-+
        |I|n|s|t|a|l|l|e|r|
+-+-+-+-+-+-+-+-+-+-+-+-+-+
|f|o|r| |L|i|n|u|x|
+-+-+-+-+-+-+-+-+-+
[+] Checking installer prerequisites...
[!] Command '7z', '7zr' or '7za' not found

Required to extract compressed files

Ubuntu/Debian:
    sudo apt install p7zip

CentOS (Enable EPEL repository):
    sudo dnf install epel-release && sudo dnf install p7zip
Or
    sudo yum install epel-release && sudo yum install p7zip

Fedora:
    sudo dnf install p7zip
Or
    sudo yum install p7zip

Arch Linux:
    sudo pacman -S p7zip

MacOS:
    brew install p7zip

となるので

sudo apt install p7zip

の後に

bash VOICEVOX-CPU.Installer.0.14.7.Linux.sh 

でインストール成功

起動は

~/.voicevox/VOICEVOX.AppImage

だと

configMigration014: /home/snowpool/.config/voicevox-cpu/config.json not exists, do nothing
[26521:0923/052732.856278:ERROR:ozone_platform_x11.cc(247)] Missing X server or $DISPLAY
[26521:0923/052732.856458:ERROR:env.cc(226)] The platform failed to initialize.  Exiting.
Segmentation fault (コアダンプ)

となってしまう

普通にubuntu へログインし
GUIから起動すれば問題なく動くが

https://qiita.com/uezo/items/7e476147ec6312ad8a2c

.runで実行
M1Macでも動作したので
同様にubuntu でもできると思ったがコマンドが見つからない

https://ponkichi.blog/voicevox-python-curl#st-toc-h-7
を参考に

とりあえず

sudo find / -name ".run"

を実行したが

[sudo] snowpool のパスワード: 
find: ‘/run/user/1000/doc’: 許可がありません
find: ‘/run/user/1000/gvfs’: 許可がありません
find: ‘/run/user/127/doc’: 許可がありません
find: ‘/run/user/127/gvfs’: 許可がありません

となる

なおFWは関係なかった
https://server-network-note.net/2022/07/ubuntu-server-22-04-lts-firewall-ufw/
を参考にsudo ufw status で確認したが
無効になっていた

とりあえず保留してopencvを先に進める

https://www.kkaneko.jp/tools/ubuntu/ubuntu_opencv.html#S1
を参考に

まず cmakeのインストール

sudo apt -y install build-essential gcc g++ make libtool texinfo dpkg-dev pkg-config
sudo apt -y install qt5-qmake
sudo apt -y install git cmake cmake-curses-gui cmake-gui curl
sudo apt -y install zlib1g-dev libcurl4-gnutls-dev

cd /tmp
git clone https://github.com/Kitware/CMake.git
cd CMake/
./configure --system-curl --system-zlib
Make
Sudo make install

次にpython3 関連

sudo apt -y install python-is-python3 python3-dev python-dev-is-python3 python3-pip python3-setuptools python3-venv build-essential

次に
OpenCV, opencv_contrib のインストール

sudo mkdir -p /usr/local/opencv
sudo chown -R $USER /usr/local/opencv
cd /usr/local/opencv
curl -O https://github.com/opencv/opencv/archive/4.x.zip
cp 4.x.zip opencv.zip
curl -O https://github.com/opencv/opencv_contrib/archive/4.x.zip
cp 4.x.zip opencv_contrib.zip

unzip opencv.zip 
Archive:  opencv.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of opencv.zip or
        opencv.zip.zip, and cannot find opencv.zip.ZIP, period.

となるので

https://www.kkaneko.jp/tools/ubuntu/ubuntu_opencv_buildout.html

https://toolatescrap.hatenablog.com/entry/2022/11/29/003848
を参考に
https://opencv.org/releases/
からmacでダウンロードしたが展開される

https://github.com/opencv/opencv/tree/4.7.0
からzipダウンロードしたが同じ
どうやらMacでzipダウンロードすると展開されるらしい

sudo apt install libgtk2.0-dev

で先にインストールしておく

https://www.kkaneko.jp/tools/ubuntu/ubuntu_opencv_buildout.html#S2
を参考に
Ceres Solver のインストール

sudo apt -y install  libceres-dev libceres2

次にpython3関連

https://www.kkaneko.jp/tools/man/python.html#systempython
によれば

Ubuntu では,システム Python は,Ubuntu システムの動作に関わっている. システム Python をバージョンアップしたり,アンインストールを行ったりするのは良くない

と言うことなので
Pyenvを使うようにする

sudo apt -y install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
cd /tmp
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="${HOME}/.pyenv"' >> ~/.bashrc
echo 'if [ -d "${PYENV_ROOT}" ]; then' >> ~/.bashrc
echo '    export PATH=${PYENV_ROOT}/bin:$PATH' >> ~/.bashrc
echo '    eval "$(pyenv init -)"' >> ~/.bashrc
echo '    eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
echo 'fi' >> ~/.bashrc
exec $SHELL -l

他の必要なものもインストールするので
https://www.kkaneko.jp/tools/ubuntu/ubuntu.html#Se
を参考に

sudo apt -y install git cmake cmake-curses-gui cmake-gui curl wget p7zip-full

次にpython関連

python-is-python3 python3-dev python-dev-is-python3 python3-pip python3-setuptools python3-venv build-essential

sudo apt -y install python-is-python3 python3-dev python-dev-is-python3 python3-pip python3-setuptools python3-venv build-essential

sudo pip3 uninstall ptyprocess sniffio terminado tornado jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder

を実行したら

do tornado jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
Found existing installation: ptyprocess 0.7.0
Not uninstalling ptyprocess at /usr/lib/python3/dist-packages, outside environment /usr
Can't uninstall 'ptyprocess'. No files were found to uninstall.
WARNING: Skipping sniffio as it is not installed.
WARNING: Skipping terminado as it is not installed.
WARNING: Skipping tornado as it is not installed.
WARNING: Skipping jupyterlab as it is not installed.
WARNING: Skipping jupyter as it is not installed.
WARNING: Skipping jupyter-console as it is not installed.
WARNING: Skipping jupytext as it is not installed.
WARNING: Skipping nteract_on_jupyter as it is not installed.
WARNING: Skipping spyder as it is not installed.
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

となった

おそらく競合しないため念のためアンインストールしてるっぽい

sudo apt -y install jupyter jupyter-qtconsole spyder3
sudo apt -y install python3-ptyprocess python3-sniffio python3-terminado python3-tornado
sudo pip3 install -U jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter

これで
JupyterLab, spyder, nteract
をインストール

sudo apt -y install python3-numpy python3-sklearn


numpy, scikit-learn のインストール

次に
TensorFlow 2.11,Keras,MatplotLib, Python 用 opencv-python のインストール

トラブルの可能性を減らすため
アンインストールをしておく

sudo apt -y remove python3-keras
sudo pip3 uninstall -y tensorflow tensorflow-cpu tensorflow-gpu tensorflow-intel tensorflow-text tensorflow-estimator tf-models-official tf_slim tensorflow_datasets tensorflow-hub keras keras-tuner keras-visualizer

クリーンインストール状態なので

WARNING: Skipping tensorflow as it is not installed.
WARNING: Skipping tensorflow-cpu as it is not installed.
WARNING: Skipping tensorflow-gpu as it is not installed.
WARNING: Skipping tensorflow-intel as it is not installed.
WARNING: Skipping tensorflow-text as it is not installed.
WARNING: Skipping tensorflow-estimator as it is not installed.
WARNING: Skipping tf-models-official as it is not installed.
WARNING: Skipping tf_slim as it is not installed.
WARNING: Skipping tensorflow_datasets as it is not installed.
WARNING: Skipping tensorflow-hub as it is not installed.
WARNING: Skipping keras as it is not installed.
WARNING: Skipping keras-tuner as it is not installed.
WARNING: Skipping keras-visualizer as it is not installed.
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv

となった

TensorFlow の前提パッケージのインストール

sudo pip3 uninstall -y six wheel astunparse tensorflow-estimator numpy keras-preprocessing absl-py wrapt gast flatbuffers grpcio opt-einsum protobuf termcolor typing-extensions google-pasta h5py tensorboard-plugin-wit markdown werkzeug requests-oauthlib rsa cachetools google-auth google-auth-oauthlib tensorboard tensorflow
sudo apt -y install python3-six python3-wheel python3-numpy python3-grpcio python3-protobuf python3-termcolor python3-typing-extensions python3-h5py python3-markdown python3-werkzeug python3-requests-oauthlib python3-rsa python3-cachetools python3-google-auth

次に
TensorFlow, numpy, pillow, pydot, matplotlib, keras, opencv-python のインストール

sudo apt -y update
sudo apt -y install python3-numpy python3-pil python3-pydot python3-matplotlib
sudo apt -y install libopencv-dev libopencv-core-dev python3-opencv libopencv-contrib-dev opencv-data
sudo pip3 install -U tensorflow tf-models-official tf_slim tensorflow_datasets tensorflow-hub keras keras-tuner keras-visualizer
sudo pip3 install git+https://github.com/tensorflow/docs
sudo pip3 install git+https://github.com/tensorflow/examples.git
sudo pip3 install git+https://www.github.com/keras-team/keras-contrib.git

インストール完了後

python3 -c "import tensorflow as tf; print( tf.__version__ )"

でバージョン確認

2023-09-26 06:14:43.998359: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.
2023-09-26 06:14:44.053113: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.
2023-09-26 06:14:45.376154: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT
2.13.0

となった

とりあえずここまで
次にPyTorch などをインストールする

Fibit の web API

Fibit の web API

Fibit Inspire3 を購入しAPIで情報を取得してみたかったので
その時のメモ

FitbitのWeb APIを実行する方法
https://www.zenryoku-kun.com/post/fitbit-api
を参考に

Web APIを利用するアプリを登録
https://dev.fitbit.com/login
から行う

Register new app
をクリック

Redirect URL以外のURL項目はhttp://localhostでOK

Application Name: アプリ名
今回はtest

Description: 10文字以上でアプリの説明
ヘルスケア関連のデータを取得して表示したい
とした

Organization *
はサイトを参考に無職とした

OAuth2.0 Application Type: 個人データを取得するのでPersonal

Redirect URL: 初回のアクセス・トークンはここに送られる
http://localhost:8000にしておく

Default Access Type:
APIでデータの書込みをしたい場合はRead & Writeを選択
Read Onlyなら読み込みのみ

これで
I have read and agree to the terms of serviceをチェックしてピンクのRegisterボタンを押す

これで登録ができた

この時に

OAuth 2.0 Client ID

Client Secret

Redirect URL
http://localhost:8000
OAuth 2.0: Authorization URI
https://www.fitbit.com/oauth2/authorize
OAuth 2.0: Access/Refresh Token Request URI
https://api.fitbit.com/oauth2/token

というように
Client ID
Client Secret
が表示される

OAuth 2.0 Tutorial
をクリックすると
アクセストークンなどの発行ができる

チュートリアルの画面では
ClientIDはそのままセットされているので
タイプを
サーバーか Client を選ぶ

エンドポイントにより認証方法が異なる

今回はclient を選択

Access Token 発行のため

PKCE Code Verifier
State

 GENERATE
をクリック

Display Authorization Page

取得を認めない情報があればチェックを外しておく

とりあえず全て取得してみるのでこれはそのままにしておく

下に認証ページへのリンクが出るのでクリック

HTTPSでない警告が出てるけど
許可をクリック

サーバーに接続できません
と表示されるけど
ブラウザのURLをコピペ

これを
Handle the Redirect
へコピペすると
Authorization Code
などが表示される

次に
Get Tokens

SUBMIT REQUEST
をクリック

これで
Response
の部分に
JSONでAccess Token が表示される

Refresh Token
も発行されているのでメモしておく

なお
Refresh Token を実行すると
Access Token
Resresh Token も両方更新されるので注意

また
Access Token は
八時間で執行するため
Refresh token で再取得する処理が必要

Githubへの公開とライセンス関連を調べた

Githubへの公開とライセンス関連を調べた

https://github.com/Snowpooll/face_weather
が今回作成したもの

顔を認識するとVOICEVOXで今日の天気を教えてくれる

コンセプトは操作しないこと
アレクサでもいいけど
声が出せないと使えないし

以下は作業ログ

リポジトリ名を
face_weather

publicで公開

Add a README file

readmeを追加

ライセンスはMITライセンスを選択

これでリポジトリを作成すれば
ライセンスの英文は自動で作成してくれる

Readmeを編集してから

git clone https://github.com/Snowpooll/face_weather.git


ローカル環境にリポジトリをクローン

この中にプログラムをコピーしていくが

__pycache__

があった

これは
ChatGPTによれば
__pycache__ は、
Pythonがソースコードをコンパイルした後のバイトコードを格納するディレクトリ

バージョン管理システム(例:Git)を使用している場合は、
通常、__pycache__ ディレクトリを
無視リストに追加することが一般的

なので

 vim .gitignore

でファイルを作成

__pycache__/

として保存

git add .gitignore

で追加

git commit -m "Add __pycache__ to .gitignore"

を実行したら

Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'snowpool@snowpool-Prime-Series.(none)')

となった

そういえば再インストールした時に設定を忘れていたので
git config –global user.name “Githubユーザ名”
git config –global user.email “メールアドレス”


再度

git commit -m "Add __pycache__ to .gitignore"

を実行

あと

query.json
test_audio.wav
weather.txt

も無視リストに加えるので

vim .gitignore

でファイルを開き
追記

git add .gitignore
git commit -m "Update .gitignore to include specific files"

で追加

次に
requirements.txt
の作成

これでライブラリ関連のインストールが簡単になる

requests
deepl
pygame
opencv-python
configparser

というようにライブラリを書いておけばOK

git push origin main

でエラー。

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/Snowpooll/face_weather.git/'

調べたら
GitHubでパスワード認証が廃止されたため、HTTPSを使ってリモートリポジトリにアクセスする際にはパーソナルアクセストークン(PAT)を使用するか、SSHキー認証を使用する必要があるらしい

とりあえずPATを使うことにする

GitHubでPATを生成する:
* GitHubにログインし、右上のアカウントアイコンから「Settings」を選択します。
* 左側のサイドバーから「Developer settings」を選択し、「Personal access tokens」に移動します。
* 「Generate new token」をクリックし、必要な権限を選択してトークンを生成します。生成されたトークンは安全な場所にコピー

で作成しようとしたら
New personal access token (classic)
の設定でつまづくので検索

https://dev.classmethod.jp/articles/github-personal-access-tokens/
によれば

Noteにはトークンの使用用途
code maintenanceとした

Expirationにはトークンの有効期限
デフォルトは30だが短いので90にする

Select scopesではトークンが利用可能なGitHub権限を設定
git cloneやgit pullをしたい場合は、repoにチェック

これで
Generate token
をクリックすれば
トークンが表示される

これで再度

git push origin main

実行したら

 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'https://github.com/Snowpooll/face_weather.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

となる

原因は
リモートリポジトリにあなたのローカルリポジトリにはない変更が含まれているために発生

思い当たることとして
READMEを
Githubで編集した後に

git pull origin main

していなかったこと

他の変更はなかったため

git push origin main --force

で強制プッシュ

とりあえずはこれで公開できた

ちなみに後で聞いたのだが
–force は、remoteのものを完全に上書きするので、使わないほうがベター
必要なcommitが消える可能性があるらしい

認証も、SSHキーを使うのがベター
とのこと

ubuntu22.04 Live USB 作成

ubuntu22.04 Live USB 作成

【簡単】balenaEtcherを使ってUbuntuのLive USBを作成する方法
を参考に

USB3.0対応の64GBのUSBメモリを購入

なお MacBook Airには
Usb type C しかないので
変換アダプターを購入し使用

OSがダウンロードできたら
balenaEtcherをダウンロード

https://etcher.balena.io
へアクセスし
Download Etcher
をクリック

しかし
Mac のx64形式しかないので
M1Macだとできない

このため
【M1】 M1 Mac で UbuntuをUSBに焼く

を参考に進める

これには
Rosetta
を使う必要があるらしいが既に入っていた

Finder を開き
ユーティリティ > ターミナルを右クリックで開く

ちなみにMacBook Airの場合
トラックパッドを2本指でタップするとできる

Macの「右クリック」4つのやり方|キーボードでもできます

を参考に

これで右クリックができるので
情報を見る

Rosettaを利用して開く
にチェックを入れる

これでUSBメモリを差し込み
Finder からターミナルを開く

diskutil list


USBをどのように認識しているか調べる

結果は

/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *251.0 GB   disk0
   1:             Apple_APFS_ISC Container disk2         524.3 MB   disk0s1
   2:                 Apple_APFS Container disk3         245.1 GB   disk0s2
   3:        Apple_APFS_Recovery Container disk1         5.4 GB     disk0s3

/dev/disk3 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +245.1 GB   disk3
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD            9.1 GB     disk3s1
   2:              APFS Snapshot com.apple.os.update-... 9.1 GB     disk3s1s1
   3:                APFS Volume Preboot                 4.6 GB     disk3s2
   4:                APFS Volume Recovery                797.2 MB   disk3s3
   5:                APFS Volume Data                    145.8 GB   disk3s5
   6:                APFS Volume VM                      6.4 GB     disk3s6

/dev/disk4 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        +2.7 GB     disk4
   1:                        EFI EFI                     209.7 MB   disk4s1
   2:                  Apple_HFS VOICEVOX 0.14.7         2.3 GB     disk4s2

/dev/disk5 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        +2.7 GB     disk5
   1:                        EFI EFI                     209.7 MB   disk5s1
   2:                  Apple_HFS VOICEVOX 0.14.7         2.3 GB     disk5s2

/dev/disk6 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        +2.7 GB     disk6
   1:                        EFI EFI                     209.7 MB   disk6s1
   2:                  Apple_HFS VOICEVOX 0.14.7         2.3 GB     disk6s2

/dev/disk7 (disk image):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        +1.5 GB     disk7
   1:                  Apple_HFS Blender                 1.4 GB     disk7s1

/dev/disk8 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *62.5 GB    disk8
   1:             Windows_FAT_32 KIOXIA                  62.5 GB    disk8s1

上にあるものはOS関連
フォーマットを見ると1つだけ
/dev/disk8

Windows_FAT_32_KIOXIA
となっているので

diskutil eraseDisk MS-DOS UNTITLED /dev/disk8

を実行

Started erase on disk8
Unmounting disk
Creating the partition map
Waiting for partitions to activate
Formatting disk8s2 as MS-DOS (FAT) with name UNTITLED
512 bytes per physical sector
/dev/rdisk8s2: 121576384 sectors in 1899631 FAT32 clusters (32768 bytes/cluster)
bps=512 spc=64 res=32 nft=2 mid=0xf8 spt=32 hds=255 hid=411648 drv=0x80 bsec=121606144 bspf=14841 rdcl=2 infs=1 bkbs=6
Mounting disk
Finished erase on disk8

となって
中身が消去される

次にディスクのアウンマウント
これをやらないとISOを書き込む時にエラーになるらしい

diskutil unmountDisk /dev/disk8

を実行すると

Unmount of all volumes on disk8 was successful

となり成功

次に書き込み
ISOファイルのパスを取得するには
FinderでISOファイルをクリックし
青くなっている状態で
Command + option + c
を押すとファイルパスが取得できる

私の場合だと

/Users/snowpool/Downloads/ubuntu-ja-22.04-desktop-amd64.iso

これを
Ddコマンドの
If で指定し ofへUSBデバイスを指定する

約8分程度で

850993+1 records in
850993+1 records out
3427803136 bytes transferred in 480.772592 secs (7129781 bytes/sec)

となり書き込みが終わる