Files changed (6) hide show
  1. Dockerfile +16 -0
  2. README.md +5 -4
  3. app.py +83 -0
  4. gitattributes +35 -0
  5. note.txt +10 -0
  6. requirements.txt +5 -0
Dockerfile ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.9-slim
2
+
3
+ WORKDIR /app
4
+
5
+ COPY . /app
6
+
7
+ RUN pip install --no-cache-dir -r requirements.txt
8
+
9
+ RUN useradd -m -u 1000 user
10
+ USER user
11
+ ENV HOME=/home/user \
12
+ PATH=/home/user/.local/bin:$PATH
13
+
14
+ EXPOSE 7860
15
+
16
+ CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
README.md CHANGED
@@ -1,10 +1,11 @@
1
  ---
2
- title: Ctrl
3
- emoji: 📊
4
- colorFrom: gray
5
- colorTo: green
6
  sdk: docker
7
  pinned: false
 
8
  ---
9
 
10
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: Test 1
3
+ emoji: 📈
4
+ colorFrom: purple
5
+ colorTo: gray
6
  sdk: docker
7
  pinned: false
8
+ short_description: test server
9
  ---
10
 
11
  Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI, HTTPException
2
+ from fastapi.middleware.cors import CORSMiddleware
3
+ from pydantic import BaseModel
4
+ import base64
5
+ import cv2
6
+ import numpy as np
7
+ import random
8
+ import uvicorn
9
+
10
+ app = FastAPI()
11
+
12
+ # 啟用 CORS 支援(允許 Unity WebGL 或跨網域連線)
13
+ app.add_middleware(
14
+ CORSMiddleware,
15
+ allow_origins=["*"],
16
+ allow_credentials=True,
17
+ allow_methods=["*"],
18
+ allow_headers=["*"],
19
+ )
20
+
21
+ # 定義 Unity 傳過來的資料格式
22
+ class ClientRequest(BaseModel):
23
+ message: str
24
+
25
+ # 輔助函式:動態生成一張隨機的 2D 圖片,並轉為 Base64 字串
26
+ def generate_random_image_base64():
27
+ # 1. 建立一張 400x400 的空白黑色圖片 (3 個顏色通道)
28
+ width, height = 400, 400
29
+ img = np.zeros((height, width, 3), dtype=np.uint8)
30
+
31
+ # 2. 隨機填滿背景顏色
32
+ bg_color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
33
+ img[:] = bg_color
34
+
35
+ # 3. 在圖片上畫一些隨機的彩色圓形或方形
36
+ for _ in range(5):
37
+ color = (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
38
+ thickness = random.choice([-1, 2, 4]) # -1 代表填滿
39
+
40
+ shape_type = random.choice(["circle", "rectangle"])
41
+ if shape_type == "circle":
42
+ center = (random.randint(0, width), random.randint(0, height))
43
+ radius = random.randint(20, 80)
44
+ cv2.circle(img, center, radius, color, thickness)
45
+ else:
46
+ pt1 = (random.randint(0, width), random.randint(0, height))
47
+ pt2 = (random.randint(0, width), random.randint(0, height))
48
+ cv2.rectangle(img, pt1, pt2, color, thickness)
49
+
50
+ # 4. 將 OpenCV 的圖片物件編碼為 JPG 格式的二進位數據
51
+ _, buffer = cv2.imencode('.jpg', img)
52
+
53
+ # 5. 將二進位數據轉為 Base64 字串
54
+ img_base64 = base64.b64encode(buffer).decode('utf-8')
55
+ return img_base64
56
+
57
+ @app.post("/get_image_and_text")
58
+ def handle_unity_request(request: ClientRequest):
59
+ # 檢查客戶端傳來的是不是 "ok" (不區分大小寫)
60
+ if request.message.strip().lower() != "ok":
61
+ raise HTTPException(status_code=400, detail="Invalid message. Please send 'ok'.")
62
+
63
+ # 生成隨機圖片的 Base64 字串
64
+ base64_image = generate_random_image_base64()
65
+
66
+ # 準備隨機的回覆文字
67
+ random_responses = [
68
+ "Server received OK! Here is your lucky image.",
69
+ "System Status: Perfect. Image generated successfully.",
70
+ "Hello from Hugging Face! Processing done.",
71
+ "OK received. Sending custom 2D matrix back to Unity."
72
+ ]
73
+ selected_text = random.choice(random_responses)
74
+
75
+ # 回傳給 Unity
76
+ return {
77
+ "status": "success",
78
+ "reply_text": selected_text,
79
+ "image_base64": base64_image
80
+ }
81
+
82
+ if __name__ == "__main__":
83
+ uvicorn.run(app, host="0.0.0.0", port=7860)
gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
note.txt ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ HTTP + WebSocket 混合架構 (Hybrid Architecture)
2
+
3
+ HTTP 通道:用來處理不需要即時、但需要高穩定度的單次請求(例如載入設定、儲存最後結果)。
4
+ WebSocket 通道:用來開啟一條不會斷的管道,讓 Unity 源源不絕地把鏡頭畫面推給雲端 AI 模型(如 YOLO),並即時拿回辨識結果。
5
+
6
+ About the cloud server,
7
+ HTTP + WebSocket(Hybrid Architecture) may be used
8
+
9
+ HTTP Channel: Used to handle one-off requests that do not require real-time processing but demand high stability (e.g., loading settings, saving final results).
10
+ WebSocket Channel: Used to establish a persistent connection, enabling Unity to continuously stream camera footage to a cloud-based AI model (such as YOLO) and receive recognition results in real time.
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ pydantic
4
+ opencv-python-headless
5
+ numpy