Compare commits

..
5 Commits
Author SHA1 Message Date
feie9454 c099c90aad remove web build dist 2025-09-01 14:32:49 +08:00
feie9454 fd0e468db9 edit web page 2025-08-20 12:27:06 +08:00
feie9454 b343ef2ddd add sys service 2025-08-20 12:21:57 +08:00
feie9454 53e704e0bf add static web files 2025-08-20 12:08:25 +08:00
feie9454 4b9374fcdc edit project arch 2025-08-20 09:08:20 +08:00
13 changed files with 164 additions and 13 deletions
-1
View File
@@ -133,7 +133,6 @@ dmypy.json
data/
datasets/
*.csv
*.json
*.xml
*.txt
# Image files (uncomment if you have large image datasets)
+26
View File
@@ -0,0 +1,26 @@
[Unit]
Description=Circuit Recognition Web Service
After=network.target
Wants=network.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/home/feie9454/elements_wires_congition
Environment=PATH=/home/feie9454/elements_wires_congition/venv/bin
ExecStart=/home/feie9454/elements_wires_congition/venv/bin/python main.py
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=circuit-recognition
# 安全设置
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ReadWritePaths=/home/feie9454/elements_wires_congition
[Install]
WantedBy=multi-user.target
+57 -4
View File
@@ -1,12 +1,54 @@
from flask import Flask, request, jsonify
from flask import Flask, request, jsonify, send_from_directory, send_file
from flask_cors import CORS
import numpy as np
import cv2
from pre_func.img_prec import img_recognition
app = Flask(__name__)
import os
from src.pre_func.img_prec import img_recognition
# 设置静态文件目录
app = Flask(__name__, static_folder='src/web', static_url_path='/static')
CORS(app)
@app.route('/')
def index():
"""主页路由,提供index.html"""
return send_from_directory(app.static_folder, 'index.html')
@app.route('/web')
def web_index():
"""Web应用入口"""
return send_from_directory(app.static_folder, 'index.html')
@app.route('/web/<path:filename>')
def web_static(filename):
"""提供web目录下的静态文件"""
return send_from_directory(app.static_folder, filename)
@app.route('/static/<path:filename>')
def static_files(filename):
"""提供静态文件服务"""
return send_from_directory(app.static_folder, filename)
@app.route('/api/status')
def api_status():
"""API状态检查"""
return jsonify({
'status': 'running',
'message': 'Elements Wires Recognition API is running',
'endpoints': {
'POST /process_image': 'Image recognition endpoint',
'GET /': 'Main web interface',
'GET /web': 'Web application',
'GET /api/status': 'API status check'
}
})
@app.route('/process_image', methods=['POST'])
def process_image():
if 'image' not in request.files:
@@ -24,4 +66,15 @@ def process_image():
if __name__ == '__main__':
app.run(debug=True, port=8000)
print("🚀 Starting Elements Wires Recognition Web Server...")
print("📁 Static files served from: src/web/")
print("🌐 Web interface available at:")
print(" - http://localhost:8000/")
print(" - http://0.0.0.0:8000/")
print("🔧 API endpoints:")
print(" - POST /process_image (for image recognition)")
print(" - GET /web/<filename> (for static files)")
print(" - GET /static/<filename> (for static files)")
print("=" * 50)
app.run(host='0.0.0.0', debug=True, port=12399)
+63
View File
@@ -0,0 +1,63 @@
#!/bin/bash
# Circuit Recognition Service Management Script
# 使用方法: ./manage_service.sh [install|start|stop|restart|status|logs|uninstall]
SERVICE_NAME="circuit-recognition"
SERVICE_FILE="/home/feie9454/elements_wires_congition/circuit-recognition.service"
SYSTEM_SERVICE_PATH="/etc/systemd/system/circuit-recognition.service"
case "$1" in
install)
echo "安装服务..."
sudo cp "$SERVICE_FILE" "$SYSTEM_SERVICE_PATH"
sudo systemctl daemon-reload
sudo systemctl enable "$SERVICE_NAME"
echo "✅ 服务已安装并设置为开机自启"
echo "使用 './manage_service.sh start' 启动服务"
;;
start)
echo "启动服务..."
sudo systemctl start "$SERVICE_NAME"
echo "✅ 服务已启动"
;;
stop)
echo "停止服务..."
sudo systemctl stop "$SERVICE_NAME"
echo "✅ 服务已停止"
;;
restart)
echo "重启服务..."
sudo systemctl restart "$SERVICE_NAME"
echo "✅ 服务已重启"
;;
status)
echo "服务状态:"
sudo systemctl status "$SERVICE_NAME"
;;
logs)
echo "查看服务日志:"
sudo journalctl -u "$SERVICE_NAME" -f
;;
uninstall)
echo "卸载服务..."
sudo systemctl stop "$SERVICE_NAME"
sudo systemctl disable "$SERVICE_NAME"
sudo rm -f "$SYSTEM_SERVICE_PATH"
sudo systemctl daemon-reload
echo "✅ 服务已卸载"
;;
*)
echo "使用方法: $0 {install|start|stop|restart|status|logs|uninstall}"
echo ""
echo "命令说明:"
echo " install - 安装服务并设置开机自启"
echo " start - 启动服务"
echo " stop - 停止服务"
echo " restart - 重启服务"
echo " status - 查看服务状态"
echo " logs - 实时查看服务日志"
echo " uninstall - 卸载服务"
exit 1
;;
esac
+1
View File
@@ -8,6 +8,7 @@ dependencies = [
"flask>=3.1.1",
"flask-cors>=6.0.1",
"numpy>=2.3.0",
"opencv-python>=4.11.0.86",
"scikit-image>=0.25.2",
"ultralytics>=8.3.156",
]
+1
View File
@@ -0,0 +1 @@
# 这个文件使 src 目录成为一个 Python 包
+1
View File
@@ -0,0 +1 @@
# 这个文件使 pre_func 目录成为一个 Python 包
@@ -1,9 +1,13 @@
import cv2
import os
from ultralytics import YOLO
def elements_recognition(img):
model = YOLO('../best_model/model_2.pt')
# 获取当前文件的目录,然后构建模型文件的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
model_path = os.path.join(current_dir, '../best_model/model_2.pt')
model = YOLO(model_path)
original = img
img = cv2.resize(original, (1000, int(original.shape[0] * 1000 / original.shape[1])))
results = model(img)[0]
@@ -1,6 +1,6 @@
import datetime
from pre_func import wires_recog
from pre_func import ele_recog
from . import wires_recog
from . import ele_recog
import cv2
import numpy as np
import base64
@@ -20,8 +20,8 @@ def generate_json(wires, components):
"单刀双掷开关": "switch",
"单刀单掷开关": "switch",
"灯泡": "lightBulb",
"电源": "BATTERY",
"电池电源": "BATTERY",
"电源": "battery",
"电池电源": "battery",
"电阻": "RESISTOR",
"黑盒电流表": "ammeter",
"螺线管": "solenoid"
@@ -89,7 +89,8 @@ def generate_json(wires, components):
elem["resistance"] = 10
elif label == "battery":
elem["voltage"] = 9
elem["batterType"] = "BATTERRY"
elem["type"] = "battery"
elem["batteryType"] = "BATTERY"
elem["internalResistance"] = 0.01
elif label == "resistor":
elem["resistorType"] = "RESISTOR"
@@ -187,8 +188,8 @@ def visualize_wires_and_components(image, results, components):
"单刀双掷开关": "switch",
"单刀单掷开关": "switch",
"灯泡":"lightBulb",
"电源": "BATTERY",
"电池电源": "BATTERY",
"电源": "battery",
"电池电源": "battery",
"电阻": "RESISTOR",
"黑盒电流表": "ammeter",
"螺线管": "solenoid"
Generated
+2
View File
@@ -69,6 +69,7 @@ dependencies = [
{ name = "flask" },
{ name = "flask-cors" },
{ name = "numpy" },
{ name = "opencv-python" },
{ name = "scikit-image" },
{ name = "ultralytics" },
]
@@ -78,6 +79,7 @@ requires-dist = [
{ name = "flask", specifier = ">=3.1.1" },
{ name = "flask-cors", specifier = ">=6.0.1" },
{ name = "numpy", specifier = ">=2.3.0" },
{ name = "opencv-python", specifier = ">=4.11.0.86" },
{ name = "scikit-image", specifier = ">=0.25.2" },
{ name = "ultralytics", specifier = ">=8.3.156" },
]