by Rain Chu | 11 月 6, 2024 | Python , 程式
可以在 windows, mac, Linux 上使用,自動地透過滑鼠鍵盤來控制你的電腦畫面,還支援螢幕截圖
簡易使用方法
安裝 pyautogui
使用 pyautogui
螢幕截圖
pyautogui.screenshot('screenshot.png')
滑鼠控制
pyautogui.moveTo(100, 100, duration = 1.5) #用1.5秒移動到x=100,y=100的位置
pyautogui.dragTo(100, 100, duration=2, button='right') #用2秒按住滑鼠右鍵到x=100,y=100的位置
pyautogui.click(clicks=2, interval=0.5, button='right') #雙擊左鍵並且中途間隔0.5秒
鍵盤控制
pyautogui.keyDown('ctrl')
pyautogui.press('a')
pyautogui.keyUp('ctrl') #全選的功能鍵效果
pyautogui.hotkey('ctrl', 'shift', 'esc') #開啟工作管理員的快捷鍵
資源
PyAutoGUI 說明文件
PyAutoGUI 原始碼
中文說明檔
相關資源
by rainchu | 10 月 2, 2024 | Python , 程式
啟用 Excel 中的 Python
在輸入框中,輸入 =py 然後按下 TAB ,就會進入下圖,儲存格前面變成有綠色框的PY,這時就可以輸入 Python 程式碼了
繪製企鵝圖的公式
# 台積電股價的小提琴圖
stock2303 = xl("A1:G218", headers=True)
sns.set_theme (font='SimHei', font_scale=0.8)
plt.figure(dpi=300)
plt.ylabel('量', rotation = 0, labelpad=15)
sns.violinplot(x="成交價", y="分量(張)", data = stock2303)
參考資料
資料探索與視覺化的優秀入門數據集,https://github.com/allisonhorst/palmerpenguins
各種 python 圖表的程式碼範例,https://seaborn.pydata.org/examples/index.html
by rainchu | 8 月 7, 2024 | Python
現在AI的時代,實在是離不開python,有時候想要快速的驗證程式設計,並且對外服務,給外部的人測試,這時候可以考慮把在 CLI 執行的 python code ,改成 web api,讓外部的人測試看看,改法如下
步驟 1: 安裝 Flask
步驟 2 : 建立一個 Web APP
可以建立一個名為 webapi.py 的檔案,並且輸入以下程式碼,這樣就可以簡單地把 GraphRAG 的服務對外
from flask import Flask, request, jsonify
import subprocess
import shlex
app = Flask(__name__)
@app.route('/query', methods=['POST'])
def query():
# 获取请求中的问题
data = request.json
question = data.get('question')
if not question:
return jsonify({'error': 'No question provided'}), 400
# 构建 CLI 命令
command = f"python -m graphrag.query --root ./ragtest --method local \"{question}\""
# 安全地处理命令
args = shlex.split(command)
# 执行命令
try:
result = subprocess.run(args, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
response = result.stdout
# 假设输出中包含 "SUCCESS:" 和我们需要的答案
if "SUCCESS:" in response:
answer = response.split("SUCCESS:")[1].strip() # 取得成功后的文本作为答案
return jsonify({'answer': answer})
else:
return jsonify({'error': 'Failed to get a valid response from the CLI tool'}), 500
except subprocess.CalledProcessError as e:
return jsonify({'error': str(e)}), 500
if __name__ == '__main__':
app.run(debug=True, port=5000)
步驟 3 : 開啟服務
步驟 4 : 使用 API
curl -X POST http://localhost:5000/query -H "Content-Type: application/json" -d "{\"question\": \"新修正之勞工特別休假日數有多少?\"}"
延伸閱讀
by Rain Chu | 6 月 18, 2024 | Python , 程式
我們常常在網路上安裝依賴 Python 的程式碼,但總是會有一推的衝突存在,Python 的虛擬環境(virtual environment)則是一個非常有用的工具,它可以在不同的專案間建立隔離的 Python 執行環境,可以確保不同專案的依賴庫互不干擾,讓 Python 的開發更加簡單、安全。以下將詳細介紹 Python 虛擬環境的概念、創建和使用方法。
虛擬環境的重要性
在沒有虛擬環境的情況下,Python 的庫和模組都會安裝在全局環境中。這會導致幾個問題:
版本衝突 :不同專案可能需要同一個庫的不同版本,全局安裝可能導致版本衝突。
依賴混亂 :隨著安裝的庫越來越多,全局環境可能變得難以管理和維護。
使用虛擬環境,每個專案都有自己獨立的環境,可以:
隔離依賴 :每個專案的依賴庫都獨立於其他專案,避免了版本和依賴衝突。
易於管理 :管理每個專案的依賴更為方便,升級或修改不會影響到其他專案。
如何創建和使用虛擬環境
1. 安裝虛擬環境
Python 3.3 以上版本已經內置了 venv
模組來創建虛擬環境。安裝新的虛擬環境非常簡單:
這個命令會在當前目錄下創建一個名為 myenv
的資料夾,其中包含了獨立的 Python 執行環境。
2. 啟用虛擬環境
創建虛擬環境後,需要啟用它以使用:
Windows
Linux
source myenv/bin/activate
啟用虛擬環境後,你會在命令行前看到虛擬環境的名稱,這表明你現在在該虛擬環境中運行 Python。
3. 安裝和管理套件
在虛擬環境中,可以使用 pip
安裝所需的庫,而這些安裝只會影響當前的虛擬環境:
pip install -r requirements.txt
這個命令會在虛擬環境中安裝 Flask,而不會影響到其他環境或全局 Python 環境。
4. 退出虛擬環境
完成工作後,可以通過以下命令退出虛擬環境:
這會恢復到全局 Python 環境。
參考資料
https://docs.python.org/zh-tw/3/tutorial/venv.html
by Rain Chu | 12 月 26, 2022 | Python , Raspberry Pi , 程式
如果想要用 Raspberry 樹梅派打造自己擁有的播放器,首選就是用VLC,可以全功能的做各種高難度的自訂控制,真的有找不到的功能,就自己再添加一下就可以了。
首先要先安裝 VLC
接下來安裝 Python VLC
python -m pip install python-vlc
封裝一個 VLC.py
import os, time
# 設置VLC庫路徑,需在import vlc之前
os.environ['PYTHON_VLC_MODULE_PATH'] = "./vlc-3.0.6"
import vlc
class Player:
'''
args:設置 options
'''
def __init__(self, *args):
if args:
instance = vlc.Instance(*args)
self.media = instance.media_player_new()
else:
self.media = vlc.MediaPlayer()
# 設置待播放的url地址或本地文件路徑,每次調用都會重新加載資源
def set_uri(self, uri):
self.media.set_mrl(uri)
# 播放 成功返回0,失敗返回-1
def play(self, path=None):
if path:
self.set_uri(path)
return self.media.play()
else:
return self.media.play()
# 暫停
def pause(self):
self.media.pause()
# 恢復
def resume(self):
self.media.set_pause(0)
# 停止
def stop(self):
self.media.stop()
# 釋放資源
def release(self):
return self.media.release()
# 是否正在播放
def is_playing(self):
return self.media.is_playing()
# 已播放時間,返回毫秒值
def get_time(self):
return self.media.get_time()
# 拖動指定的毫秒值處播放。成功返回0,失敗返回-1 (需要注意,只有當前多媒體格式或流媒體協議支持才會生效)
def set_time(self, ms):
return self.media.get_time()
# 音視頻總長度,返回毫秒值
def get_length(self):
return self.media.get_length()
# 獲取當前音量(0~100)
def get_volume(self):
return self.media.audio_get_volume()
# 設置音量(0~100)
def set_volume(self, volume):
return self.media.audio_set_volume(volume)
# 返回當前狀態:正在播放;暫停中;其他
def get_state(self):
state = self.media.get_state()
if state == vlc.State.Playing:
return 1
elif state == vlc.State.Paused:
return 0
else:
return -1
# 當前播放進度情況。返回0.0~1.0之間的浮點數
def get_position(self):
return self.media.get_position()
# 拖動當前進度,傳入0.0~1.0之間的浮點數(需要注意,只有當前多媒體格式或流媒體協議支持才會生效)
def set_position(self, float_val):
return self.media.set_position(float_val)
# 獲取當前文件播放速率
def get_rate(self):
return self.media.get_rate()
# 設置播放速率(如:1.2,表示加速1.2倍播放)
def set_rate(self, rate):
return self.media.set_rate(rate)
# 設置寬高比率(如"16:9","4:3")
def set_ratio(self, ratio):
self.media.video_set_scale(0) # 必須設置為0,否則無法修改屏幕寬高
self.media.video_set_aspect_ratio(ratio)
# 註冊監聽器
def add_callback(self, event_type, callback):
self.media.event_manager().event_attach(event_type, callback)
# 移除監聽器
def remove_callback(self, event_type, callback):
self.media.event_manager().event_detach(event_type, callback)
使用VLC.py
def my_call_back(event):
print("call:", player.get_time())
if "__main__" == __name__:
player = Player()
player.add_callback(vlc.EventType.MediaPlayerTimeChanged, my_call_back)
player.play("test.mp3")
# 防止当前进程退出
while True:
pass
def my_call_back(event):
print("call:", player.get_time())
官方文檔
https://www.olivieraubert.net/vlc/python-ctypes/doc/
參考資料
https://zhuanlan.zhihu.com/p/69906080
by Rain Chu | 3 月 14, 2022 | AI , OpenCV , Python , Raspberry Pi , 人臉辨識
辦公室打卡到底要用甚麼方法最好,是員工卡嗎?還是手機APP定位?還是用打卡鐘?在2020年之後一定是跟你說生物辨識最好,因為又有疫情影響,大家最愛的是「人臉辨識」系統,非接觸,難造假,順便量體溫,噴個酒精,一切都這麼美好,但是只有千金難買好系統,一套好用的人臉辨識系統加上網動輒1萬元台幣,這時工程師的我們一定要自己DIY來一個「人臉辨識」打卡下。
Raspberry Pi 4 的 OpenCV 4 準備
採用 opencv_facerecognition 解決方案
https://github.com/mickey9801/opencv_facerecognition
首先安裝相關的依賴以及DB
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install python3-opencv python3-picamera python3-numpy python3-pil
sudo apt-get install sqlitebrowser
下載 opencv_facerecognition,並且解開壓縮
cd ~
wget https://github.com/mickey9801/opencv_facerecognition/archive/refs/heads/master.zip
unzip master
cd opencv_facerecognition-master/
設定環境人臉辨識的資料以及環境
等等會用到 haarcascade_frontalface_default.xml ,不要用 OpenCV 3版本的,要用之前安裝的版本,我將路徑放在下方
# 複製 xml
cp ~/opencv/data/haarcascades/haarcascade_frontalface_default.xml ~/opencv_facerecognition-master/haarcascade_frontalface_default.xml
# 設定環境
python3 setup.py
擷取人臉用來訓練圖像
如果你是用 usb webcam 可以執行 recordface_webcam.py ,如果是用 PiCam 就用 python3 recordface_picam.py,此時會先問你的名字,提供完名字後,會開啟相機,當相機偵測到人臉時候,按下 「f」 鍵,就會開始抓取 30 張人像,放在 dataset 下
python3 recordface_webcam.py # for using webcam
python3 recordface_picam.py # for using PiCam v2
訓練人臉的圖像
在我們的系統中 OpenCV4,要修改 trainer.py 中的程式碼以符合現況
找到 recognizer = cv2.face.createLBPHFaceRecognizer() 把它改成 recognizer = cv2.face.LBPHFaceRecognizer_create()
#recognizer = cv2.face.createLBPHFaceRecognizer() # or
recognizer = cv2.face.LBPHFaceRecognizer_create()
開始訓練,訓練完畢後會在目錄中取得一個 recognizer 目錄,裡面存放訓練後的資料
開始辨識人臉
有了訓練資料後,就可以開始測試準度了,開始前記得也要改一下程式碼,符合現況
找到 Setup LBPH recognizer for face recognition,更改成下面的程式碼
# Setup LBPH recognizer for face recognition
#recognizer = cv2.face.createLBPHFaceRecognizer() # or LBPHFaceRecognizer_create()
recognizer = cv2.face.LBPHFaceRecognizer_create()
# Load training data
#recognizer.load(fname) # change to read() for LBPHFaceRecognizer_create()
recognizer.read(fname)
存檔後執行 detector_picam.py,就可以在辦公室打卡了
python3 detector_webcam.py # for using webcam
python3 detector_picam.py # for using PiCam v2
未來,再補影片~~相信OpenCV的安裝一定很多困難,只能說關關難關關過~~
近期留言