gooブログはじめました!

写真付きで日記や趣味を書くならgooブログ

Mac(M3)のanacondaでtensorflowを使う

2024-08-28 18:12:50 | Mac
2024年8月27日現在の情報です
Macでtensorflowを使う場合、anacondaは使わない方が良いという記事が多かったのですが、いくつも違った環境を作るのは嫌だったのでanaconda上でtensorflowをインストールしたら、インストールでき、一応kerasも動いてるようなので紹介します。
たまたま動作しているだけかもしれませんが参考まで

Mac(m3) anacondaのpython3.09、3.10、3.11ではtensorflowのインストールはできました
ただ、3.12では該当するtensorflow-metalが見当たらないということでインストールできず
ちなみにインストール手順は以下の通り

pip install tensorflow
pip install tensorflow-macos
pip install tensorflow-metal

python3.11.9でインストールされたtensorflowのバージョンは2.16.2
python3.12でインストールしようとしているのは、2.17.0
このあたりが原因かな

私の環境は
MacBookAir M3 Sonoma14.6.1
Anaconda Navigator 2.6.2
Python 3.12.4
Conda 24.7.1
python3.11.9はconda-forgeチャネル版です
ただし、anaconda navigatonでpythonをダウングレードして環境をcreateしています

なお、参考にしたのは
https://developer.apple.com/metal/tensorflow-plugin/

MacでネットワークのIPV6をオフにする

2024-08-23 12:30:52 | Mac
ぷららのプライベートホームページがFTPSを使うようになってファイルをアップできなくなりました。
ぷららに問い合わせたところIPV6の設定オフを試して下さいとのことでWindowsで実施したらうまくアップできるようになりました。
Macではどうかと思って調べたらIPV6の設定を簡単にはオフできないようです

terminalでコマンドを実行しないといけないようです

network setup -setv6off Wi-Fi

システム設定のネットワーク →Wi-Fi→詳細→TCP/IP→IPV6を構成
を見るとオフが追加されチェックが入っています

元に戻すにはシステム設定上で自動にチェックを入れるようです

なおterminalコマンドでネットワークの状態を確認するコマンドは以下のとおりです

network setup -get info Wi-Fi

でも、ぷららのプライベートホームページは2025年3月で使えなくなるのですけどね
しかも、これでもSSLエラーが残ったままです

LINEで金額表示が見にくい

2024-08-07 09:16:26 | Python
LINEのトークで金額が表示されると青文字でリンクが貼られており、見にくいですよね
これはこのリンクをクリックするとline payが立ち上がるようになっているのですが、line payを使わない人にはただ見にくいだけです
普通の文字表示に変更しましょう でも設定方法がわかりにくのと1番下の方にあるのです よっぽど設定変更してほしくないのでしょうね

line ➡️ ホーム ➡️ 設定 ➡️ トーク ➡️ 金額テキストのリンク表示
をオフにしましょう

python(carnets)で顔認証し、バドミントンなどで順番決めを行う

2024-03-16 11:37:57 | Python

iPadで顔認証し、人数を数えるpythonスクリプトを作りましたので紹介します。carnetsという無料アプリを使ってpythonを実行しています。

色々制約があるようでなんちゃってpythonですが参考に。

以下はマークダウン形式です。

```python
# ipad+python(carnets)を用いて
# ipadのカメラで
# 顔認証し、人数を数える(カメラマンを含む)
# ただし、顔に手がついていたり、傾いた顔、横顔は認識出来ない
# ipadpro11 ios17.4 carnets with Scipy
# carnets はAppstoreで入手して下さい(いちおう無料)
```


```python
# pip list
```


```python
import cv2
# from cv2 import dnn # deep neural networks
from PIL import Image
import matplotlib.pyplot as plt # carnetsでは画像表示に必須のよう
import time
import numpy as np
import random
```


```python
device = 0 # back camera
# device = 1 # front camera
cap = cv2.VideoCapture(device) # camera shot
```


```python
time.sleep(0.1) # 直ぐには読みこめない
```


```python
# カメラ設定を確認する どういうわけか解像度しか読みこめない
# カメラを横向きにしてもだめ

camera_parameters = ['CAP_PROP_FRAME_WIDTH', # 4 解像度(幅)
                    'CAP_PROP_FRAME_HEIGHT', # 3 解像度(高さ)
                    'CAP_PROP_FOURCC',       # 圧縮フォーマット
                    'CAP_PROP_BRIGHTNESS',   # 明るさ
                    'CAP_PROP_CONTRAST',     # コントラスト
                    'CAP_PROP_SATURATION',   # 彩度
                    'CAP_PROP_HUE',          # 色相
                    'CAP_PROP_GAIN',         # ゲイン
                    'CAP_PROP_EXPOSURE']     # 露出
print('CAP_PROP_FRAME_WIDTH = ', cap.get(4))
print('CAP_PROP_FRAME_HEIGHT= ', cap.get(3))
```

    CAP_PROP_FRAME_WIDTH =  360.0
    CAP_PROP_FRAME_HEIGHT=  480.0

 

```python
cap.set(3, 1080) # どうも設定変更ができないようです
```

 


    True

 


```python
print('CAP_PROP_FRAME_WIDTH = ', cap.get(4))
print('CAP_PROP_FRAME_HEIGHT= ', cap.get(3))
```

    CAP_PROP_FRAME_WIDTH =  360.0
    CAP_PROP_FRAME_HEIGHT=  480.0

 

```python
ret, frame = cap.read()
```


```python
print(ret)
```

    True

 

```python
print(type(frame)) # 正常に読み込めたかの確認 numpy.ndarray形式ならOK
```

    <class 'numpy.ndarray'>

 

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


```python
rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # RGB変換
```


```python
# plt.figure(figsize=(6,5)) # 画面サイズが変更できない
```


```python
plt.imshow(gray) # matplotlibの色なのでグレーには見えませんが、気にしないでください
```

 


   

 


    
![png](output_14_1.png)
    

 

```python
# plt.imshow(rgb)
```


```python
# ハール識別器の設定

# 見かけ上ファイル名は...xmlですが、情報を見ると.txtがついていた
# メガネをかけていると検知できないことがあります
# 横顔は検知できません
# clf = cv2.CascadeClassifier("haarcascade_frontalface_default.xml.txt")
# clf = cv2.CascadeClassifier("haarcascade_upperbody.xml")
clf = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml.txt")
```


```python
faces = clf.detectMultiScale(gray,
                             scaleFactor=1.1,
                             minNeighbors=2,
                             minSize=(15,15))
```


```python
faces # 検出した顔の配列を確認のため出力 ex, ey, ew, eh
```

 


    array([[120, 281,  25,  25],
           [ 90, 284,  23,  23],
           [240,  90,  25,  25],
           [289,  87,  26,  26],
           [332,  86,  26,  26],
           [236, 138,  28,  28],
           [286, 238,  26,  26],
           [235, 191,  26,  26],
           [332, 188,  27,  27],
           [ 88, 175,  34,  34],
           [118, 178,  31,  31],
           [150, 176,  32,  32]], dtype=int32)

 


```python
maxid = len(faces)
print(maxid)
```

    12

 

```python
rnd = random.sample(range(1,maxid+2),maxid+1) # カメラマン含む
print(rnd)
```

    [8, 13, 6, 10, 2, 9, 3, 5, 1, 12, 4, 7, 11]

 

```python
id = 0 # detected id
```


```python
# 顔を四角で囲み、ランダムな番号をふる
for (ex,ey,ew,eh) in faces:
    cv2.rectangle(rgb,          # image
                  (ex,ey),       # box
                  (ex+ew,ey+eh),
                  (255,255,255), # color
                  2,             # thickness
#                 cv2.FILLED)    # linetype 塗りつぶし
                  cv2.LINE_AA)
    text = "{0}".format(rnd[id])
    id = id + 1
    # text = "{0}".format(id)
    scale = 0.6
    cv2.putText(rgb,                      # 描画対象のimage
                text,                     # text
                (ex+3,ey-5),              # right bottom
                cv2.FONT_HERSHEY_SIMPLEX, # font style
                scale,                    # fontScale
                (255,255,255),            # color
                2,                        # thickness
                cv2.LINE_AA)              # lineTyp
    cv2.rectangle(rgb,(ex,ey-25),(ex+30,ey),(255,255,255),1) # rectangle on id
```


```python
# cameraman
bg = cv2.rectangle(rgb,(45,475),(300,450),(255,255,255),cv2.FILLED)
cameraman = cv2.putText(rgb,
            'total: '+"{0}".format(maxid+1)+
            '  cameraman: '+"{0}".format(rnd[maxid]),
            (50,470),
            cv2.FONT_HERSHEY_SIMPLEX,
            scale,
            (0,0,0),
            1,
            cv2.LINE_AA)
```


```python
plt.imshow(rgb)
```

 


   

 


    
![png](output_24_1.png)
    

 

```python
cap.release()
```


```python

```


```python

```


スペーシアのリモコンの電池交換

2024-03-15 20:48:17 | 日記

スペーシアのリモコンが動作しづらくなったので、電池交換をすることにしました。

マニュアルによればマイナスドライバーを差し込んでぐいとこじ開けるとありますが、マイナスドライバーの大きさをどれぐらいにすれば良いか分からず、小さいと傷つけそうなので1cm幅のものを用意しました。

それでもバキと折れそうです。仕方ないので、少しでも横側に隙間ができたら、そこにもドライバーを差し込んで二方向、三方向からこじ開けていきました。

こんなに難しいのならばねじ式の方が良いのではないかと思ってしまいます。

車屋さんにやってもらうのが1番なのでしょうが、技術料が高いので二の足を踏んでしまいますね。