举报
要在无人机上使用K230进行图像识别并通过4G模块传输结果和画面,可以按照以下步骤操作:
核心硬件
连接方式
设置自动拨号(关键步骤)
通过AT命令配置4G模块为自动拨号模式(需借助串口工具提前配置):
AT+QNETDEVCTL=1,1,1 # 开启自动拨号
AT+CGDCONT=1,"IP","<你的APN>" # 设置运营商APN(如中国移动CMNET)
✅ 验证:插入SIM卡,模块指示灯显示联网成功。
驱动加载
K230原生支持EC200M驱动,开机后自动识别为usb0网络设备。
import network
import utime
def connect_4g():
lan = network.LAN(0) # 0对应usb0接口
lan.active(True) # 激活网卡
utime.sleep(10) # 等待拨号
if lan.status() == network.STAT_GOT_IP:
print("4G Connected! IP:", lan.ifconfig()[0])
return True
else:
print("Connect failed!")
return False
# 初始化网络
if not connect_4g():
reset() # 失败则重启import cv2
import socket
import numpy as np
# 初始化摄像头
cap = cv2.VideoCapture(0)
# 加载AI模型(示例用YOLOv5)
model = yolov5.load("path/to/yolov5_model.kmodel")
# 创建Socket连接(传输到云服务器)
server_ip = "云服务器公网IP"
server_port = 9000
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((server_ip, server_port))
while True:
ret, frame = cap.read()
if not ret: break
# 执行图像识别
detections = model.inference(frame)
result_img = model.draw_results(frame, detections)
# 压缩图像(降低带宽)
_, img_encoded = cv2.imencode(".jpg", result_img, [cv2.IMWRITE_QUALITY, 50])
# 封装数据(JSON+图片二进制)
data = {
"results": detections.tolist(), # 识别结果
"image": img_encoded.tobytes() # 压缩后的图像
}
# 发送数据(需自定义编码协议)
sock.send(json.dumps(data).encode() + b'')
utime.sleep(0.1) # 控制传输频率 使用Python搭建简易服务器(部署在公网云服务器):
# server.py
import socket
import json
import cv2
import numpy as np
server = socket.socket()
server.bind(("0.0.0.0", 9000))
server.listen(1)
while True:
client, addr = server.accept()
buffer = b''
while b'' not in buffer:
buffer += client.recv(1024*1024)
# 分割JSON和图片数据
data_parts = buffer.split(b'')[0].split(b'}{')
for part in data_parts:
try:
data = json.loads(part if part.startswith(b'{') else b'{' + part)
# 解码图片
img = cv2.imdecode(np.frombuffer(data["image"], np.uint8), 1)
# 保存或转发到手机APP
cv2.imwrite(f"results/{time.time()}.jpg", img)
print("Detected:", data["results"])
except: pass 方案一:Web浏览器查看
http://<云服务器IP>:5000方案二:自定义APP
SurfaceView实时渲染图片 + TextView显示识别结果带宽优化
稳定性增强
# K230代码增加重连机制
def send_data(data):
try:
sock.send(data)
except:
connect_4g() # 断网后重新连接供电问题
替代方案(无云服务器)
无人机端:
[Camera] → [K230] → [4G模块] → 互联网
↓
云服务器:接收数据 → 存储结果 → 推送至手机
↓
手机端:实时显示画面 + 识别标签(如:car: 0.95, person: 0.87)按照此方案,您可实现在移动网络下传输10fps的480p画面+识别结果(平均带宽200KB/s)。若需完整代码模板,建议参考K230官方GitHub中的网络示例。
举报
更多回帖