Select Page

Flux AI – 終於可以在圖片上產出文字了

免費使用 Flux AI 的方法

  1. Huggingface
  2. Seaart
  3. Glif
  4. FluxPro

在自己的電腦中使用 Flux AI

採用 flux pro api

API 文件

在自己的電腦安裝

Flux 建議用 Pyhton 3.10 ,可以去 GitHub 下載並且安裝,但只能使用 dev (開發版) 和 Schnell (速度版)

cd $HOME && git clone https://github.com/black-forest-labs/flux
cd $HOME/flux
python3.10 -m venv .venv
source .venv/bin/activate
pip install -e ".[all]"

模型連結如下

FLUX 1 schnell

FLUX 1 Dev

安裝好模型和程式後,設定如下

export FLUX_SCHNELL=<path_to_flux_schnell_sft_file>
export FLUX_DEV=<path_to_flux_dev_sft_file>
export AE=<path_to_ae_sft_file>

使用的方法有兩種,一個是開啟交互介面

python -m flux --name <name> --loop

另一個是直接在 CLI 介面上產圖

python -m flux --name <name> \
  --height <height> --width <width> \
  --prompt "<prompt>"

參數說明

  • --name: 模型名稱 “flux-schnell”, “flux-dev”)
  • --device: 用CPU還是GPU運算 (default: “cuda” if available, otherwise “cpu”)
  • --offload: 模型未被使用時,將其從 GPU 卸載到 CPU。這樣做的目的是節省 GPU 的記憶體資源,特別是在模型不需要時,減少對 GPU 記憶體的佔用。同時,當模型需要再次使用時,它會從 CPU 重新加載到 GPU 上。
  • --share: 對外開放你的連結

其中 <name> 要代入模型的名稱,範例如下,

python demo_gr.py --name flux-schnell --device cuda --prompt "a girl"

將你的Python程式碼改成 web api

現在AI的時代,實在是離不開python,有時候想要快速的驗證程式設計,並且對外服務,給外部的人測試,這時候可以考慮把在 CLI 執行的 python code ,改成 web api,讓外部的人測試看看,改法如下

步驟 1: 安裝 Flask

pip install 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 : 開啟服務

python webapi.py

步驟 4 : 使用 API

curl -X POST http://localhost:5000/query -H "Content-Type: application/json" -d "{\"question\": \"新修正之勞工特別休假日數有多少?\"}"

延伸閱讀

用 wpa_cli 控制你的 WIFI (無線網路)

用 wpa_cli 控制你的 WIFI (無線網路)

wpa_cli 是一個用於與 wpa_supplicant 交互的命令行界面工具,當然也支持在 command line 下直接使用命令控制 WIFI,可以用來管理無線網絡接口的設定和運行狀態。這個工具非常強大,支持多種操作,如掃描無線網絡、連接到網絡、變更設定等,而我都用python 透過 wpa_cli 來控制 WIFI。

首先掃描無線網路

打開終端,並且記得要用 root 權限來執行 wpa_cli

sudo wpa_cli -i wlan1 scan
sleep 5  # 給予一些時間來完成掃描
sudo wpa_cli -i wlan1 scan_results

回應如下圖

加一個網路配置

利用 ssid 和 paswword 來連線到一個已知的無線網路上,可以將下面的指令編寫成 wpa_cli_add_network.sh ,並且執行她,也可以直接使用,執行後取得的 network id 通常是一個 int 的數字,把她記起來,之後就可以透過這個 network id 來連接網路,和斷開網路

# 添加新的網絡配置
network_id=$(wpa_cli -i wlan1 add_network | awk '{print $NF}')

# 設置SSID和密碼
wpa_cli -i wlan1 set_network $network_id ssid '"你的SSID"'
wpa_cli -i wlan1 set_network $network_id psk '"你的密碼"'

# 啟用該網絡
wpa_cli -i wlan1 enable_network $network_id

# 保存配置
wpa_cli -i wlan1 save_config

連接網路以及斷開網路

# 重新連線
wpa_cli -i wlan1 reconnect

#斷開連線
wpa_cli -i wlan1 disconnect

刪除網路配置

wpa_cli -i wlan1 remove_network $network_id

檢查連線是否存在

wpa_cli -i wlan1 status

得到的輸出通常如下

其中,檢查是否有連線成功,可以看 wpa_state 是否為 COMPLETED

檢查已經存在的網路設定

sudo wpa_cli -i wlan1 list_networks

輸出如下

可以用 flags CURRENT 來檢查現在是連線到那一個 network ,也可以取得 network id ,並且用他來連線

開發 ChatGPT 的兩種方法

開發 ChatGPT 的兩種方法

ChatGPT 一開始出來的時候還沒有開放 API 的時候,就有很多人用 Session key 的方法去使用他的服務,到現在雖然說用官方的 OpenAPI 已經很強大了,但缺點是 ChatGPT 永遠比較新,像是剛出來 ChatGPT 4 的時候,就沒有 API 可以用,都要等好幾個月,這時候只能使用 Session key 的方法去存取服務,這個方法可以採用 revChatGPT

revChatGPT 的三種安裝方法

原始碼下載:

https://github.com/acheong08/ChatGPT

Pip 安裝

https://pypi.org/project/revChatGPT/

只要打下面的指令就可以安裝

python -m pip install --upgrade revChatGPT

revChatGPT 的使用方法

免費使用要用 V1 ,免費版本會有些限制,目前的限制如下

  • Proxy server: 5 requests / 10 seconds
  • OpenAI: 50 requests / hour for each account

採用登入方法,要去 config.json 中填入你的帳號和密碼

{
  "email": "email",
  "password": "your password"
}

採用 Session Key 的方法,要去你的瀏覽器中,找到你的 Key 並且回填,但這種方法,一旦你登出後就要重新來過,只有自己一個人使用的時候可以用,比較不推薦,使用方法,先點下面的連結

https://chat.openai.com/api/auth/session

找到 accessToken 後面的文字,複製後取代 <access_token> 即可

{
  "access_token": "<access_token>"
}

設定完成後可以建立一個 Python 檔案,測試一下

from revChatGPT.V1 import Chatbot
chatbot = Chatbot(config={
  "access_token": "<your access_token>"
})
print("Chatbot: ")
prev_text = ""
for data in chatbot.ask(
    "請給我10個拯救地球的好主意",
):
    message = data["message"][len(prev_text) :]
    print(message, end="", flush=True)
    prev_text = data["message"]
print()

OpenAI 官方 Python API

這邊網路教學很多,而且常常在改,我就放一個教學,可以直接去看一下

在Raspberry 使用 Python Vlc or CVlc 播放影音

如果想要用 Raspberry 樹梅派打造自己擁有的播放器,首選就是用VLC,可以全功能的做各種高難度的自訂控制,真的有找不到的功能,就自己再添加一下就可以了。

首先要先安裝 VLC

sudo apt install -y 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