diff --git a/FastApi/__pycache__/fastApi.cpython-38.pyc b/FastApi/__pycache__/fastApi.cpython-38.pyc index 9929836..6ebe158 100644 Binary files a/FastApi/__pycache__/fastApi.cpython-38.pyc and b/FastApi/__pycache__/fastApi.cpython-38.pyc differ diff --git a/FastApi/fastApi.py b/FastApi/fastApi.py index 0622706..54c0145 100644 --- a/FastApi/fastApi.py +++ b/FastApi/fastApi.py @@ -2,21 +2,123 @@ from fastapi import FastAPI, File, UploadFile, Form, WebSocket, WebSocketDisconnect from fastapi.responses import JSONResponse -import os, shutil, subprocess, json +import os, shutil, subprocess, json, time, threading, asyncio app = FastAPI() VIDEO_SAVE_PATH = "/mnt/save/video" IMAGE_SAVE_PATH = "/mnt/save/warning" MODBUS_BIN_PATH = "/home/orangepi/RKApp/GPIOSignal/bin/sendGpioSignal" +GPIO_CONFIG_FILE = "/home/orangepi/RKApp/InitAuth/conf/.env" os.makedirs(VIDEO_SAVE_PATH, exist_ok=True) os.makedirs(IMAGE_SAVE_PATH, exist_ok=True) +# ============================== GPIO 状态控制器 ============================== # + +# 全局状态变量 +current_gpio_state = 'HIGH' # 当前GPIO状态 ('HIGH' 或 'LOW') +last_person_time = 0.0 # 最后一次检测到人的时间 +gpio_state_lock = threading.Lock() # 线程锁 +GPIO_DELAY_SECONDS = 2.0 # 人离开后的延迟时间(秒) + +def update_gpio_config(value: str): + """ + 更新GPIO配置文件中的 outPutMode 值 + + Args: + value: 'true' 或 'false' + """ + try: + with open(GPIO_CONFIG_FILE, 'r', encoding='utf-8') as f: + lines = f.readlines() + + modified = False + for i, line in enumerate(lines): + if line.strip().startswith('outPutMode'): + lines[i] = f"outPutMode:{value}\n" + modified = True + break + + if not modified: + lines.append(f"outPutMode:{value}\n") + + with open(GPIO_CONFIG_FILE, 'w', encoding='utf-8') as f: + f.writelines(lines) + + print(f"[GPIO] 配置文件已更新: outPutMode={value}") + return True + except Exception as e: + print(f"[GPIO ERROR] 更新配置文件失败: {e}") + return False + +def call_gpio_program(): + """调用GPIO控制程序""" + try: + signal = "echo 'orangepi' | sudo " + MODBUS_BIN_PATH + result = subprocess.run([signal], shell=True, capture_output=True, text=True, timeout=5) + if result.returncode == 0: + print(f"[GPIO] GPIO程序调用成功") + return True + else: + print(f"[GPIO ERROR] GPIO程序调用失败: {result.stderr}") + return False + except Exception as e: + print(f"[GPIO ERROR] 调用GPIO程序时发生异常: {e}") + return False + +def set_gpio_low(): + """设置GPIO为低电平""" + global current_gpio_state + if update_gpio_config('false') and call_gpio_program(): + current_gpio_state = 'LOW' + print(f"[GPIO] ✅ 已切换到低电平 (检测到人)") + return True + return False + +def set_gpio_high(): + """设置GPIO为高电平""" + global current_gpio_state + if update_gpio_config('true') and call_gpio_program(): + current_gpio_state = 'HIGH' + print(f"[GPIO] ✅ 已恢复高电平 (延迟{GPIO_DELAY_SECONDS}秒)") + return True + return False + +def gpio_monitor_task(): + """ + GPIO监控后台任务 + 定期检查是否需要恢复高电平 + """ + global current_gpio_state, last_person_time + + print("[GPIO] 🚀 GPIO监控线程已启动") + + while True: + time.sleep(0.5) # 每0.5秒检查一次 + + with gpio_state_lock: + current_time = time.time() + time_since_last_person = current_time - last_person_time + + # 如果当前是低电平,且距离上次检测到人已超过延迟时间 + if (current_gpio_state == 'LOW' and + last_person_time > 0 and + time_since_last_person >= GPIO_DELAY_SECONDS): + + print(f"[GPIO] ⏰ 距上次检测: {time_since_last_person:.1f}秒,准备恢复高电平") + set_gpio_high() + +# 启动GPIO监控线程 +gpio_monitor_thread = threading.Thread(target=gpio_monitor_task, daemon=True) +gpio_monitor_thread.start() + @app.websocket("/ws/distance") @app.websocket("/ws/distance/") async def websocket_distance(websocket: WebSocket): + global current_gpio_state, last_person_time + await websocket.accept() print("✅ WebSocket 客户端已连接") try: @@ -26,7 +128,7 @@ async def websocket_distance(websocket: WebSocket): msg = json.loads(data) distance = msg.get("distance") ts = msg.get("ts") - print(f"收到距离: {distance}, 时间戳: {ts}") + print(f"📨 收到距离: {distance}m, 时间戳: {ts}") # # 写入日志,单独try,避免异常影响后续流程 # try: @@ -36,33 +138,35 @@ async def websocket_distance(websocket: WebSocket): # f.write(log_line) # except Exception as log_e: # print(f"日志写入失败: {log_e}") - #调用 Modbus 可执行文件 - # print(f"调用 Modbus 程序,传递距离: {distance}") - signal = "echo 'orangepi' | sudo "+ MODBUS_BIN_PATH - result = subprocess.run( - [signal], - # shell=True,ocapture_output=True, text=True, timeout=0 - shell=True - ) - # print("signal:", signal) - # print(f"Modbus 程序返回: {result.stdout.strip()}, 错误: {result.stderr.strip()}") - if result.returncode != 0: - # 发送错误信息给客户端 - await websocket.send_json({ - "error": f"modbus 程序执行失败: {result.stderr.strip()}" - }) - continue + + # ⭐ GPIO状态控制逻辑 + with gpio_state_lock: + current_time = time.time() + + # 更新最后检测到人的时间 + last_person_time = current_time + print(f"[GPIO] 🔄 更新最后检测时间") + + # 如果当前是高电平,切换到低电平 + if current_gpio_state == 'HIGH': + print(f"[GPIO] 🔻 当前为高电平,准备切换到低电平") + set_gpio_low() + else: + print(f"[GPIO] ⚡ 当前已是低电平,保持状态") - # 正常发送结果 + # 发送响应给客户端 await websocket.send_json({ + "status": "success", "distance": distance, - "modbus_output": result.stdout.strip() + "gpio_state": current_gpio_state, + "message": f"已检测到人,GPIO状态: {current_gpio_state}" }) except json.JSONDecodeError: await websocket.send_text("invalid JSON") except Exception as e: await websocket.send_text(f"server error: {e}") + print(f"❌ 处理消息时出错: {e}") except WebSocketDisconnect: print("⚠️ WebSocket 客户端断开连接") diff --git a/FastApi/fastApi.py.bak b/FastApi/fastApi.py.bak new file mode 100644 index 0000000..0622706 --- /dev/null +++ b/FastApi/fastApi.py.bak @@ -0,0 +1,121 @@ +#本程序用于启用fastApi,用于与摄像头的数据交互建立连接 + +from fastapi import FastAPI, File, UploadFile, Form, WebSocket, WebSocketDisconnect +from fastapi.responses import JSONResponse +import os, shutil, subprocess, json + +app = FastAPI() + +VIDEO_SAVE_PATH = "/mnt/save/video" +IMAGE_SAVE_PATH = "/mnt/save/warning" +MODBUS_BIN_PATH = "/home/orangepi/RKApp/GPIOSignal/bin/sendGpioSignal" + +os.makedirs(VIDEO_SAVE_PATH, exist_ok=True) +os.makedirs(IMAGE_SAVE_PATH, exist_ok=True) + + +@app.websocket("/ws/distance") +@app.websocket("/ws/distance/") +async def websocket_distance(websocket: WebSocket): + await websocket.accept() + print("✅ WebSocket 客户端已连接") + try: + while True: + data = await websocket.receive_text() + try: + msg = json.loads(data) + distance = msg.get("distance") + ts = msg.get("ts") + print(f"收到距离: {distance}, 时间戳: {ts}") + + # # 写入日志,单独try,避免异常影响后续流程 + # try: + # now = datetime.now() + # log_line = f"{now.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]} distance={distance} ts={ts}\n" + # with open("/home/orangepi/Opencv/time.txt", "a") as f: + # f.write(log_line) + # except Exception as log_e: + # print(f"日志写入失败: {log_e}") + #调用 Modbus 可执行文件 + # print(f"调用 Modbus 程序,传递距离: {distance}") + signal = "echo 'orangepi' | sudo "+ MODBUS_BIN_PATH + result = subprocess.run( + [signal], + # shell=True,ocapture_output=True, text=True, timeout=0 + shell=True + ) + # print("signal:", signal) + # print(f"Modbus 程序返回: {result.stdout.strip()}, 错误: {result.stderr.strip()}") + if result.returncode != 0: + # 发送错误信息给客户端 + await websocket.send_json({ + "error": f"modbus 程序执行失败: {result.stderr.strip()}" + }) + continue + + # 正常发送结果 + await websocket.send_json({ + "distance": distance, + "modbus_output": result.stdout.strip() + }) + + except json.JSONDecodeError: + await websocket.send_text("invalid JSON") + except Exception as e: + await websocket.send_text(f"server error: {e}") + + except WebSocketDisconnect: + print("⚠️ WebSocket 客户端断开连接") + except Exception as e: + print("❌ WebSocket 处理出错:", e) + +@app.post("/upload_video/") +async def upload_video( + video: UploadFile = File(..., description="上传的视频(.mp4)") +): + if not video.filename.lower().endswith('.mp4'): + return JSONResponse(status_code=400, content={"error": "视频必须为.mp4格式"}) + video_path = os.path.join(VIDEO_SAVE_PATH, video.filename) + with open(video_path, "wb") as vid_file: + shutil.copyfileobj(video.file, vid_file) + return {"video_saved_to": video_path} + + +@app.post("/upload_image/") +async def upload_image( + image: UploadFile = File(..., description="上传的图片(.jpg)") +): + if not image.filename.lower().endswith('.jpg'): + return JSONResponse(status_code=400, content={"error": "图片必须为.jpg格式"}) + image_path = os.path.join(IMAGE_SAVE_PATH, image.filename) + with open(image_path, "wb") as img_file: + shutil.copyfileobj(image.file, img_file) + return {"image_saved_to": image_path} + + +@app.post("/upload_distance/") +async def upload_distance( + distance: float = Form(..., description="距离") +): + # 调用本地 modbus 程序,将距离作为参数传递 + try: + #写入日志精确到毫秒 + # now = datetime.now() + # log_line = f"{now.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]} distance={distance} ts={ts}\n" + # with open("/home/orangepi/Opencv/time.txt", "a") as f: + # f.write(log_line) + result = subprocess.run( + [MODBUS_BIN_PATH, str(int(distance))], + capture_output=True, + text=True, + timeout=5 + ) + if result.returncode != 0: + return JSONResponse(status_code=500, content={"error": f"modbus程序执行失败: {result.stderr}"}) + return { + "distance": distance, + "modbus_output": result.stdout.strip() + } + except Exception as e: + return JSONResponse(status_code=500, content={"error": str(e)}) + diff --git a/GPIOSignal/bin/sendGpioSignal b/GPIOSignal/bin/sendGpioSignal index 6708e27..e4280fa 100755 Binary files a/GPIOSignal/bin/sendGpioSignal and b/GPIOSignal/bin/sendGpioSignal differ diff --git a/GPIOSignal/src/sendGpioSignal.cpp b/GPIOSignal/src/sendGpioSignal.cpp index 6435b04..530bcb5 100644 --- a/GPIOSignal/src/sendGpioSignal.cpp +++ b/GPIOSignal/src/sendGpioSignal.cpp @@ -19,7 +19,7 @@ Parmas: argv[2]: 设置引脚为高/低电平 */ -const string SetFile = "/home/orangepi/InitAuth/conf/.env"; +const string SetFile = "/home/orangepi/RKApp/InitAuth/conf/.env"; // 初始化GPIO引脚 int InitGpio(int GPIO_Pin1, int GPIO_Pin2); @@ -59,9 +59,6 @@ int main(int argc, char *argv[]) this_thread::sleep_for(chrono::milliseconds(100)); - WriteGpio(GPIO_Pin1, !value); - WriteGpio(GPIO_Pin2, !value); - return 0; } @@ -70,14 +67,14 @@ bool GetOutValue(int &value) { bool flag = true; // 读取文件 - ReadFile *rf =new ReadFile(SetFile); - if (rf->Open() == false) + ReadFile rf(SetFile); + if (rf.Open() == false) { cerr << "读取文件失败" << endl; flag = false; } - auto str = rf->ReadLines(); + auto str = rf.ReadLines(); for (auto &ii : str) { if (ii.find("outPutMode") != string::npos) @@ -86,6 +83,7 @@ bool GetOutValue(int &value) } } + rf.Close(); return flag; } diff --git a/GPIOSignal/src/sendGpioSignal.cpp.bak b/GPIOSignal/src/sendGpioSignal.cpp.bak new file mode 100644 index 0000000..6435b04 --- /dev/null +++ b/GPIOSignal/src/sendGpioSignal.cpp.bak @@ -0,0 +1,113 @@ +/* + 本程序用于读取配置文件 + 根据配置文件发送高低电平 + 发送引脚固定:7,8 +*/ + +#include +#include +#include + +#include "/home/orangepi/RKApp/softWareInit/NetraLib/include/Netra.hpp" + +using namespace std; +using namespace QCL; + +/* +Parmas: + argv[1]: GPIO引脚编号 + argv[2]: 设置引脚为高/低电平 +*/ + +const string SetFile = "/home/orangepi/InitAuth/conf/.env"; + +// 初始化GPIO引脚 +int InitGpio(int GPIO_Pin1, int GPIO_Pin2); + +// 写入GPIO引脚 +void WriteGpio(int GPIO_Pin, int value); + +// 获取输出模式 +bool GetOutValue(int &value); + +int main(int argc, char *argv[]) +{ + int GPIO_Pin1 = 7; + int GPIO_Pin2 = 8; + + int value = 0; + cout << "[sendGpioSignal] 启动,读取配置: " << SetFile << endl; + if (GetOutValue(value) == false) + { + cerr << "[sendGpioSignal] 未读取到 outPutMode,程序退出" << endl; + return -1; + } + cout << "[sendGpioSignal] 读取到 outPutMode=" << (value == 1 ? "true" : "false") << endl; + + // 初始化GPIO引脚 + if (InitGpio(GPIO_Pin1, GPIO_Pin2) != 0) + { + cout << "Error: Failed to initialize GPIO pin " << endl; + return 1; + } + // 写入GPIO引脚 + cout << "[sendGpioSignal] 设置 GPIO(" << GPIO_Pin1 << "," << GPIO_Pin2 << ") 为 " + << (value == 1 ? "HIGH" : "LOW") << endl; + WriteGpio(GPIO_Pin1, value); + WriteGpio(GPIO_Pin2, value); + cout << "[sendGpioSignal] 完成" << endl; + + this_thread::sleep_for(chrono::milliseconds(100)); + + WriteGpio(GPIO_Pin1, !value); + WriteGpio(GPIO_Pin2, !value); + + return 0; +} + +// 获取输出模式 +bool GetOutValue(int &value) +{ + bool flag = true; + // 读取文件 + ReadFile *rf =new ReadFile(SetFile); + if (rf->Open() == false) + { + cerr << "读取文件失败" << endl; + flag = false; + } + + auto str = rf->ReadLines(); + for (auto &ii : str) + { + if (ii.find("outPutMode") != string::npos) + { + value = (ii.substr(string("outPutMode:").size()) == "true" ? 1 : 0); + } + } + + return flag; +} + +// 初始化GPIO引脚 +int InitGpio(int GPIO_Pin1, int GPIO_Pin2) +{ + // 使用物理引脚编号,确保与实际排针一致 + if (wiringPiSetupPhys() != 0) + { + return -1; // 初始化失败 + } + + pinMode(GPIO_Pin1, OUTPUT); + pinMode(GPIO_Pin2, OUTPUT); + digitalWrite(GPIO_Pin1, LOW); // 默认设置为低电平 + digitalWrite(GPIO_Pin2, LOW); // 默认设置为低电平 + + return 0; // 初始化成功 +} + +// 写入GPIO引脚 +void WriteGpio(int GPIO_Pin, int value) +{ + digitalWrite(GPIO_Pin, value == 1 ? HIGH : LOW); +} \ No newline at end of file diff --git a/GPIOSignal/src/yolov11_stereo_distance_ws.py b/GPIOSignal/src/yolov11_stereo_distance_ws.py new file mode 100644 index 0000000..a3a332b --- /dev/null +++ b/GPIOSignal/src/yolov11_stereo_distance_ws.py @@ -0,0 +1,2013 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +YOLOv11 + Depth Demo on RK3588 3-NPU 并行版 (v2.0) +==================================================== + +项目描述: + 基于 RK3588 芯片的高性能目标检测系统,集成深度信息和距离报警功能。 + 充分利用 RK3588 的三颗 NPU 核心,实现并行推理以最大化帧率性能。 + +核心特性: + 1. 多 NPU 并行推理 - 每颗 NPU 核心独立运行 RKNN 模型实例 + 2. 多线程流水线架构 - 图像采集、模型推理、结果渲染分离 + 3. 深度距离检测 - 结合彩色图像和深度信息计算目标距离 + 4. 实时报警系统 - 根据距离阈值触发报警并保存关键帧 + 5. WebSocket 数据上报 - 实时推送检测结果到远程服务器 + 6. 视频录制功能 - 同时保存原始视频和标注视频 + +性能指标: + - 单 NPU: ~18 FPS + - 三 NPU 并行: ~48-52 FPS + - CPU/GPU 占用率: <60% + +作者: xisnoDy +创建时间: 2025年 +最后更新: 2025年7月9日 +版本: v2.0 +""" + +import os +import sys +import time +import math +import threading +import queue +import json +import datetime +from typing import Tuple + +import cv2 +import numpy as np +from openni import openni2 +from dotenv import load_dotenv + +from rknn_executor import RKNN_model_container +from dataset_utils import COCO_test_helper + +import subprocess + +# ============================== 配置文件加载 ============================== # + +def load_config(): + """ + 从 .env 文件加载配置参数 + + 该函数会查找并加载 .env 配置文件,将环境变量转换为相应的数据类型。 + 支持的数据类型包括:字符串、整数、浮点数、布尔值、列表和集合。 + + Returns: + dict: 包含所有配置参数的字典 + + Raises: + FileNotFoundError: 当 .env 文件不存在时 + ValueError: 当配置参数格式错误时 + """ + # 获取项目根目录下的 .env 文件路径 + project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + env_path = os.path.join(project_root, '.env') + + # 检查 .env 文件是否存在 + if not os.path.exists(env_path): + raise FileNotFoundError(f"配置文件不存在: {env_path}") + + # 加载 .env 文件 + load_dotenv(env_path) + print(f"[INFO] 已加载配置文件: {env_path}") + + # 辅助函数:安全获取环境变量 + def get_env_str(key, default=None): + """获取字符串类型的环境变量""" + value = os.getenv(key, default) + if value is None: + raise ValueError(f"缺少必需的配置参数: {key}") + return value + + def get_env_int(key, default=None): + """获取整数类型的环境变量""" + value = os.getenv(key, default) + if value is None: + raise ValueError(f"缺少必需的配置参数: {key}") + try: + return int(value) + except ValueError: + raise ValueError(f"配置参数 {key} 必须是整数: {value}") + + def get_env_float(key, default=None): + """获取浮点数类型的环境变量""" + value = os.getenv(key, default) + if value is None: + raise ValueError(f"缺少必需的配置参数: {key}") + try: + return float(value) + except ValueError: + raise ValueError(f"配置参数 {key} 必须是浮点数: {value}") + + def get_env_bool(key, default=None): + """获取布尔类型的环境变量""" + value = os.getenv(key, default) + if value is None: + raise ValueError(f"缺少必需的配置参数: {key}") + return value.lower() in ('true', '1', 'yes', 'on') + + def get_env_list(key, dtype=int, default=None): + """获取列表类型的环境变量""" + value = os.getenv(key, default) + if value is None: + raise ValueError(f"缺少必需的配置参数: {key}") + try: + return [dtype(x.strip()) for x in value.split(',') if x.strip()] + except ValueError: + raise ValueError(f"配置参数 {key} 格式错误: {value}") + + def get_env_set(key, dtype=int, default=None): + """获取集合类型的环境变量""" + return set(get_env_list(key, dtype, default)) + + def get_env_tuple(key, dtype=int, default=None): + """获取元组类型的环境变量""" + return tuple(get_env_list(key, dtype, default)) + + # 构建配置字典 + config = { + # 硬件路径配置 + 'OPENNI_LIB_PATH': get_env_str('OPENNI_LIB_PATH'), + 'MODEL_PATH': get_env_str('MODEL_PATH'), + + # NPU 配置参数 + 'NPU_CORES': get_env_list('NPU_CORES', int), + 'CPU_THREADS': get_env_int('CPU_THREADS'), + 'CPU_AFFINITY': get_env_set('CPU_AFFINITY', int), + + # 模型推理配置参数 + 'OBJ_THRESH': get_env_float('OBJ_THRESH'), + 'NMS_THRESH': get_env_float('NMS_THRESH'), + 'IMG_SIZE': get_env_tuple('IMG_SIZE', int), + 'PERSON_CLASS_ID': get_env_int('PERSON_CLASS_ID'), + + # 队列配置参数 + 'CAP_QUEUE_SIZE': get_env_int('CAP_QUEUE_SIZE'), + 'RES_QUEUE_SIZE': get_env_int('RES_QUEUE_SIZE'), + + # 摄像头遮挡检测配置参数 + 'BRIGHTNESS_THRESHOLD': get_env_int('BRIGHTNESS_THRESHOLD'), + 'VARIANCE_THRESHOLD': get_env_int('VARIANCE_THRESHOLD'), + + # 深度信息处理配置参数 + 'DEPTH_SAMPLE_RADIUS': get_env_int('DEPTH_SAMPLE_RADIUS'), + 'DEPTH_FILTER_SIZE': get_env_int('DEPTH_FILTER_SIZE'), + + # 距离分区和报警配置参数 + 'NEAR_THRESHOLD': get_env_float('NEAR_THRESHOLD'), + 'MID_THRESHOLD': get_env_float('MID_THRESHOLD'), + 'MAX_DISTANCE': get_env_float('MAX_DISTANCE'), + + # 文件保存配置参数 + 'WARNING_IMAGE_DIR': get_env_str('WARNING_IMAGE_DIR'), + 'WARNING_IMAGE_NAME_FORMAT': get_env_str('WARNING_IMAGE_NAME_FORMAT'), + 'VIDEO_SAVE_DIR': get_env_str('VIDEO_SAVE_DIR'), + 'RAW_VIDEO_NAME_FORMAT': get_env_str('RAW_VIDEO_NAME_FORMAT'), + 'MARK_VIDEO_NAME_FORMAT': get_env_str('MARK_VIDEO_NAME_FORMAT'), + 'WARNING_SNAPSHOT_INTERVAL': get_env_float('WARNING_SNAPSHOT_INTERVAL'), + + # WebSocket 上报配置参数 + 'WS_URL': get_env_str('WS_URL'), + 'WS_REPORT_INTERVAL': get_env_float('WS_REPORT_INTERVAL'), + + # 显示和调试配置参数 + 'ENABLE_GUI': get_env_bool('ENABLE_GUI'), + 'ENABLE_VIDEO_RECORDING': get_env_bool('ENABLE_VIDEO_RECORDING'), + 'FPS_STATS_ENABLED': get_env_bool('FPS_STATS_ENABLED'), + + # 画面翻转配置参数 + 'FLIP_HORIZONTAL': get_env_bool('FLIP_HORIZONTAL'), + 'FLIP_VERTICAL': get_env_bool('FLIP_VERTICAL'), + + # 时区配置 + 'TIMEZONE_OFFSET': get_env_int('TIMEZONE_OFFSET'), + } + + # 打印加载的关键配置信息(用于调试) + print("[INFO] 主要配置参数:") + print(f" - 模型路径: {config['MODEL_PATH']}") + print(f" - NPU 核心: {config['NPU_CORES']}") + print(f" - 图像尺寸: {config['IMG_SIZE']}") + print(f" - 置信度阈值: {config['OBJ_THRESH']}") + print(f" - GUI 模式: {config['ENABLE_GUI']}") + print(f" - 视频录制: {config['ENABLE_VIDEO_RECORDING']}") + print(f" - 水平翻转: {config['FLIP_HORIZONTAL']}") + print(f" - 垂直翻转: {config['FLIP_VERTICAL']}") + + return config + + +# 加载全局配置 +try: + CONFIG = load_config() + print("[INFO] 配置文件加载成功") +except Exception as e: + print(f"[ERROR] 配置文件加载失败: {e}") + sys.exit(1) + +# ============================== 全局配置参数 ============================== # +# 注意: 以下变量从 .env 文件动态加载,用于保持代码兼容性 + +# 硬件路径配置 +OPENNI_LIB_PATH = CONFIG['OPENNI_LIB_PATH'] # OpenNI 库路径 +MODEL_PATH = CONFIG['MODEL_PATH'] # RKNN 模型文件路径 + +# NPU 配置参数 +NPU_CORES = CONFIG['NPU_CORES'] # 指定参与运算的 NPU 核心序号 +CPU_THREADS = CONFIG['CPU_THREADS'] # OpenCV CPU 线程数 +CPU_AFFINITY = CONFIG['CPU_AFFINITY'] # CPU 亲和性设置,绑定到特定核心 + +# 模型推理配置参数 +OBJ_THRESH = CONFIG['OBJ_THRESH'] # 目标检测置信度阈值 +NMS_THRESH = CONFIG['NMS_THRESH'] # 非极大值抑制阈值 +IMG_SIZE = CONFIG['IMG_SIZE'] # 模型输入尺寸 (height, width) +PERSON_CLASS_ID = CONFIG['PERSON_CLASS_ID'] # 人体类别ID (COCO dataset) + +# 队列配置参数 +CAP_QUEUE_SIZE = CONFIG['CAP_QUEUE_SIZE'] # 采集→推理 队列深度 +RES_QUEUE_SIZE = CONFIG['RES_QUEUE_SIZE'] # 推理→渲染 队列深度 + +# 摄像头遮挡检测配置参数 +BRIGHTNESS_THRESHOLD = CONFIG['BRIGHTNESS_THRESHOLD'] # 亮度阈值,低于此值认为可能被遮挡 +VARIANCE_THRESHOLD = CONFIG['VARIANCE_THRESHOLD'] # 方差阈值,低于此值认为画面过于均匀 + +# 深度信息处理配置参数 +DEPTH_SAMPLE_RADIUS = CONFIG['DEPTH_SAMPLE_RADIUS'] # 深度采样半径(像素) +DEPTH_FILTER_SIZE = CONFIG['DEPTH_FILTER_SIZE'] # 深度中值滤波核大小 + +# 距离分区和报警配置参数 +NEAR_THRESHOLD = CONFIG['NEAR_THRESHOLD'] # 近距离阈值 (米) +MID_THRESHOLD = CONFIG['MID_THRESHOLD'] # 中距离阈值 (米) +MAX_DISTANCE = CONFIG['MAX_DISTANCE'] # 报警判定的最大距离 (米),超出则视为安全 + +# 文件保存配置参数 +WARNING_IMAGE_DIR = CONFIG['WARNING_IMAGE_DIR'] # 报警截图保存目录 +WARNING_IMAGE_NAME_FORMAT = CONFIG['WARNING_IMAGE_NAME_FORMAT'] # 报警截图文件名格式 +VIDEO_SAVE_DIR = CONFIG['VIDEO_SAVE_DIR'] # 视频保存目录 +RAW_VIDEO_NAME_FORMAT = CONFIG['RAW_VIDEO_NAME_FORMAT'] # 原始视频文件名格式 +MARK_VIDEO_NAME_FORMAT = CONFIG['MARK_VIDEO_NAME_FORMAT'] # 标注视频文件名格式 +WARNING_SNAPSHOT_INTERVAL = CONFIG['WARNING_SNAPSHOT_INTERVAL'] # 报警截图最小间隔 (秒) + +# WebSocket 上报配置参数 +WS_URL = CONFIG['WS_URL'] # WebSocket 上报目标 URL +WS_REPORT_INTERVAL = CONFIG['WS_REPORT_INTERVAL'] # WebSocket 上报间隔 (秒) + +# 显示和调试配置参数 +ENABLE_GUI = CONFIG['ENABLE_GUI'] # 是否启用 GUI 显示 (False: 无头模式) +ENABLE_VIDEO_RECORDING = CONFIG['ENABLE_VIDEO_RECORDING'] # 是否启用视频录制功能 +FPS_STATS_ENABLED = CONFIG['FPS_STATS_ENABLED'] # 是否启用 FPS 统计功能 + +# 画面翻转配置参数 +FLIP_HORIZONTAL = CONFIG['FLIP_HORIZONTAL'] # 是否水平镜像翻转画面 +FLIP_VERTICAL = CONFIG['FLIP_VERTICAL'] # 是否垂直上下翻转画面 + +# 时区配置 (北京时间 UTC+8) +TIMEZONE_OFFSET = CONFIG['TIMEZONE_OFFSET'] # 北京时间偏移量(小时) + +# GPIO 控制配置参数 +GPIO_CMD_PATH = "/home/orangepi/RKApp/GPIOSignal/bin/sendGpioSignal" # GPIO 控制程序路径 +GPIO_CONFIG_FILE = "/home/orangepi/InitAuth/conf/.env" # GPIO 配置文件路径 +GPIO_DELAY_SECONDS = 2.0 + +# ========================================================================= # + +# ========================= OpenCV 性能优化配置 ========================= # +cv2.setUseOptimized(True) # 启用 OpenCV 优化 +cv2.setNumThreads(CPU_THREADS) # 设置 OpenCV CPU 线程数 + +# 尝试设置 CPU 亲和性,将当前进程绑定到特定 CPU 核心 +try: + os.sched_setaffinity(0, CPU_AFFINITY) # 绑定到 CPU 核心 4-7 + print(f"[INFO] CPU 亲和性已设置: {CPU_AFFINITY}") +except (AttributeError, PermissionError) as e: + print(f"[WARN] 无法设置 CPU 亲和性: {e}") + pass + +# ============================== 时间工具函数 ============================== # + +def get_beijing_time(): + """ + 获取北京时间 (UTC+8) + + Returns: + datetime: 北京时间的 datetime 对象 + """ + import datetime + utc_now = datetime.datetime.utcnow() + beijing_time = utc_now + datetime.timedelta(hours=TIMEZONE_OFFSET) + return beijing_time + + +def format_beijing_timestamp(fmt="%Y-%m-%d %H:%M:%S"): + """ + 格式化北京时间戳 + + Args: + fmt (str): 时间格式化字符串 + + Returns: + str: 格式化后的北京时间字符串 + """ + return get_beijing_time().strftime(fmt) + + +# ============================== FPS 统计类 ============================== # + +class FPSStatistics: + """ + FPS 统计工具类 + 用于记录和计算帧率的最大值、最小值和平均值 + """ + + def __init__(self): + """初始化 FPS 统计数据""" + self.fps_history = [] # FPS 历史记录 + self.max_fps = 0.0 # 最高 FPS + self.min_fps = float('inf') # 最低 FPS + self.total_frames = 0 # 总帧数 + self.start_time = time.perf_counter() # 开始时间 + + def update(self, current_fps): + """ + 更新 FPS 统计数据 + + Args: + current_fps (float): 当前帧率 + """ + if current_fps > 0: # 只记录有效的 FPS 值 + self.fps_history.append(current_fps) + self.max_fps = max(self.max_fps, current_fps) + self.min_fps = min(self.min_fps, current_fps) + self.total_frames += 1 + + def get_average_fps(self): + """ + 计算平均 FPS + + Returns: + float: 平均帧率 + """ + if len(self.fps_history) == 0: + return 0.0 + return sum(self.fps_history) / len(self.fps_history) + + def get_overall_fps(self): + """ + 计算总体 FPS(基于总时间和总帧数) + + Returns: + float: 总体帧率 + """ + elapsed_time = time.perf_counter() - self.start_time + if elapsed_time > 0: + return self.total_frames / elapsed_time + return 0.0 + + def get_statistics(self): + """ + 获取完整的 FPS 统计信息 + + Returns: + dict: 包含所有统计数据的字典 + """ + return { + 'max_fps': self.max_fps if self.max_fps > 0 else 0.0, + 'min_fps': self.min_fps if self.min_fps != float('inf') else 0.0, + 'avg_fps': self.get_average_fps(), + 'overall_fps': self.get_overall_fps(), + 'total_frames': self.total_frames, + 'samples': len(self.fps_history) + } + + def print_statistics(self): + """打印详细的 FPS 统计信息""" + stats = self.get_statistics() + print("\n" + "="*50) + print(" FPS 统计报告") + print("="*50) + print(f"最高 FPS: {stats['max_fps']:.2f}") + print(f"最低 FPS: {stats['min_fps']:.2f}") + print(f"平均 FPS: {stats['avg_fps']:.2f}") + print(f"总体 FPS: {stats['overall_fps']:.2f}") + print(f"总处理帧数: {stats['total_frames']}") + print(f"统计样本数: {stats['samples']}") + print(f"运行时间: {time.perf_counter() - self.start_time:.2f} 秒") + print("="*50) + + +# ============================== 后处理工具函数 ============================== # + +def filter_boxes(boxes, box_confidences, box_class_probs): + """ + 过滤目标检测结果,根据置信度阈值筛选有效边界框 + + 该函数实现了基于置信度的边界框过滤机制,只保留高于设定阈值的检测结果。 + 置信度计算公式: final_confidence = objectness_score * class_probability + + Args: + boxes (np.ndarray): 边界框坐标数组,形状为 [N, 4],格式为 [x1, y1, x2, y2] + box_confidences (np.ndarray): 目标存在置信度数组,形状为 [N, 1] + box_class_probs (np.ndarray): 类别概率分布数组,形状为 [N, num_classes] + + Returns: + tuple: (filtered_boxes, filtered_classes, filtered_scores) + - filtered_boxes: 过滤后的边界框坐标 + - filtered_classes: 过滤后的类别索引 + - filtered_scores: 过滤后的最终置信度分数 + """ + conf = box_confidences.reshape(-1) # 展平置信度数组为一维 + cls_max = np.max(box_class_probs, axis=-1) # 获取每个框的最大类别概率 + classes = np.argmax(box_class_probs, axis=-1) # 获取每个框的类别索引 + final_scores = cls_max * conf # 计算最终置信度分数 + keep = np.where(final_scores >= OBJ_THRESH) # 保留高于阈值的框的索引 + + return boxes[keep], classes[keep], final_scores[keep] + + +def dfl(position): + """ + Distribution Focal Loss (DFL) 回归解码算法 + + DFL 是一种将连续值回归问题转换为分类问题的技术,通过学习距离分布来提高 + 边界框回归的精度。该函数将网络输出的分布形式预测转换为具体的坐标偏移量。 + + 算法流程: + 1. 将位置预测重塑为分组形式 (每个坐标分量一组) + 2. 应用 softmax 激活函数得到概率分布 + 3. 计算加权期望值作为最终的坐标偏移量 + + Args: + position (np.ndarray): 位置预测张量,形状为 [batch, channels, height, width] + channels 必须能被 4 整除 (对应 x1, y1, x2, y2) + + Returns: + np.ndarray: 解码后的位置偏移量,形状为 [batch, 4, height, width] + """ + n, c, h, w = position.shape + p_num = 4 # 边界框有4个坐标分量 (x1, y1, x2, y2) + mc = c // p_num # 每个坐标分量的通道数 + + # 重塑张量为分组形式: [batch, 4, mc, height, width] + y = position.reshape(n, p_num, mc, h, w) + + # 应用 softmax 激活函数 (数值稳定化版本) + y = np.exp(y - np.max(y, axis=2, keepdims=True)) # 减去最大值防止溢出 + y /= y.sum(axis=2, keepdims=True) # 归一化为概率分布 + + # 创建累积权重矩阵 [0, 1, 2, ..., mc-1] + acc = np.arange(mc, dtype=np.float32).reshape(1, 1, mc, 1, 1) + + # 计算加权期望值 (即分布的期望) + return (y * acc).sum(axis=2) + + +def box_process(position): + """ + 处理边界框回归预测,将网络输出转换为实际坐标 + + 该函数实现了 YOLOv11 的边界框解码逻辑,将网络输出的相对偏移量转换为 + 绝对坐标。处理流程包括: + 1. 创建特征图网格坐标 + 2. 计算缩放比例 (特征图 → 输入图像) + 3. 应用 DFL 解码 + 4. 转换为绝对坐标系 + + Args: + position (np.ndarray): DFL 位置预测张量,形状为 [1, C, H, W] + + Returns: + np.ndarray: 转换后的边界框坐标,形状为 [1, 4, H, W] + 格式为 [x1, y1, x2, y2],坐标系为输入图像坐标系 + """ + grid_h, grid_w = position.shape[2:4] # 获取特征图尺寸 + + # 创建网格坐标矩阵 + col, row = np.meshgrid(np.arange(grid_w), np.arange(grid_h)) # 列坐标和行坐标 + grid = np.stack((col, row), axis=0).reshape(1, 2, grid_h, grid_w) # 堆叠为网格张量 [1, 2, H, W] + + # 计算特征图到输入图像的缩放比例 + stride = np.array([ + IMG_SIZE[1] // grid_w, # x 方向缩放比例 + IMG_SIZE[0] // grid_h # y 方向缩放比例 + ]).reshape(1, 2, 1, 1) + + # 应用 DFL 解码得到相对偏移量 + position = dfl(position) # [1, 4, H, W] + + # 计算边界框坐标 (相对于网格中心) + box_xy = grid + 0.5 - position[:, 0:2] # 左上角坐标 (x1, y1) + box_xy2 = grid + 0.5 + position[:, 2:4] # 右下角坐标 (x2, y2) + + # 转换为输入图像坐标系 + box_xy_abs = box_xy * stride # 左上角绝对坐标 + box_xy2_abs = box_xy2 * stride # 右下角绝对坐标 + + return np.concatenate((box_xy_abs, box_xy2_abs), axis=1) + + +def post_process(outputs): + """ + YOLOv11 后处理主函数,整合多尺度预测结果 + + 该函数实现了完整的 YOLOv11 后处理流程,包括: + 1. 多尺度特征融合 + 2. 边界框解码 + 3. 置信度过滤 + 4. 非极大值抑制 (NMS) + + YOLOv11 网络结构说明: + - 3个检测头,对应不同尺度的特征图 + - 每个检测头输出2个张量: 边界框回归 + 类别置信度 + - 边界框使用 DFL (Distribution Focal Loss) 编码 + + Args: + outputs (list): 网络输出列表,包含 6 个张量 (3个尺度 × 2个输出) + [bbox_reg_large, cls_conf_large, bbox_reg_medium, cls_conf_medium, + bbox_reg_small, cls_conf_small] + + Returns: + tuple: (final_boxes, final_classes, final_scores) + - final_boxes: 最终的边界框坐标 [N, 4],经过 NMS 处理 + - final_classes: 最终的类别索引 [N] + - final_scores: 最终的置信度分数 [N] + 如果没有检测到目标,返回 (None, None, None) + """ + branches = 3 # YOLOv11 有3个检测分支 (不同尺度) + pair = len(outputs) // branches # 每个分支包含的输出数量 (应该为2) + + # 分别收集各分支的边界框回归、类别置信度和目标性得分 + boxes_list, cls_conf_list, ones_list = [], [], [] + + # 处理每个尺度分支的输出 + for i in range(branches): + bbox_output = outputs[pair * i] # 边界框回归输出 + cls_output = outputs[pair * i + 1] # 类别置信度输出 + + # 处理边界框回归 + boxes_list.append(box_process(bbox_output)) + + # 收集类别置信度 + cls_conf_list.append(cls_output) + + # 创建目标性得分 (YOLOv11中固定为1,表示该位置存在目标的概率) + ones_list.append(np.ones_like(cls_output[:, :1])) + + def flatten_feature_map(feature_tensor): + """ + 将特征图展平为二维矩阵 + + Args: + feature_tensor (np.ndarray): 输入特征张量 [N, C, H, W] + + Returns: + np.ndarray: 展平后的特征矩阵 [N*H*W, C] + """ + # 转换维度顺序: [N, C, H, W] → [N, H, W, C] + transposed = feature_tensor.transpose(0, 2, 3, 1) + # 展平空间维度: [N, H, W, C] → [N*H*W, C] + return transposed.reshape(-1, transposed.shape[-1]) + + # 合并所有尺度的预测结果 + all_boxes = np.concatenate([flatten_feature_map(b) for b in boxes_list]) # 合并边界框 + all_cls_conf = np.concatenate([flatten_feature_map(c) for c in cls_conf_list]) # 合并类别置信度 + all_ones = np.concatenate([flatten_feature_map(o) for o in ones_list]) # 合并目标性得分 + + # 第一步过滤: 基于置信度阈值过滤边界框 + filtered_boxes, filtered_classes, filtered_scores = filter_boxes( + all_boxes, all_ones, all_cls_conf + ) + + # 如果没有满足条件的检测框,直接返回 + if filtered_boxes.size == 0: + return None, None, None + + # 第二步过滤: 非极大值抑制 (NMS) 去除重叠框 + # NMS 参数说明: + # - boxes: 边界框列表 + # - scores: 对应的置信度分数 + # - score_threshold: 分数阈值 (已在第一步过滤中处理) + # - nms_threshold: IoU 阈值,控制重叠程度 + nms_indices = cv2.dnn.NMSBoxes( + filtered_boxes.tolist(), + filtered_scores.tolist(), + OBJ_THRESH, # 置信度阈值 + NMS_THRESH # NMS IoU 阈值 + ) + + # 检查 NMS 结果 + if len(nms_indices) == 0: + return None, None, None + + # 提取最终结果 + final_indices = nms_indices.flatten() # 展平索引数组 + final_boxes = filtered_boxes[final_indices] + final_classes = filtered_classes[final_indices] + final_scores = filtered_scores[final_indices] + + return final_boxes, final_classes, final_scores + +# ============================== 辅助处理函数 ============================== # + +# ============================== GPIO 控制器类 ============================== # + +class GPIOController: + """ + GPIO 信号控制器 + + 管理 GPIO 输出状态,实现以下逻辑: + - 检测到人时立即输出低电平 + - 人离开后延迟指定时间再恢复高电平 + + Attributes: + gpio_cmd (str): GPIO 控制程序路径 + config_file (str): 配置文件路径 + delay_seconds (float): 延迟时间(秒) + current_state (str): 当前GPIO状态 ('HIGH' 或 'LOW') + last_person_time (float): 最后一次检测到人的时间戳 + """ + + def __init__(self, gpio_cmd: str, config_file: str, delay_seconds: float = 2.0): + """ + 初始化 GPIO 控制器 + + Args: + gpio_cmd (str): GPIO 控制程序路径 + config_file (str): 配置文件路径 + delay_seconds (float): 人离开后的延迟时间(秒) + """ + self.gpio_cmd = gpio_cmd + self.config_file = config_file + self.delay_seconds = delay_seconds + self.current_state = 'HIGH' # 初始状态为高电平 + self.last_person_time = 0.0 # 最后检测到人的时间 + self._lock = threading.Lock() # 线程安全锁 + + print(f"[INFO] GPIO 控制器已初始化") + print(f" - GPIO 程序: {self.gpio_cmd}") + print(f" - 配置文件: {self.config_file}") + print(f" - 延迟时间: {self.delay_seconds}秒") + + def update(self, person_detected: bool): + """ + 更新 GPIO 状态 + + Args: + person_detected (bool): 是否检测到人 + """ + with self._lock: + current_time = time.time() + + if person_detected: + # 检测到人,更新时间戳 + self.last_person_time = current_time + + # 如果当前是高电平,切换到低电平 + if self.current_state == 'HIGH': + self._set_gpio_low() + else: + # 未检测到人,检查是否应该恢复高电平 + time_since_last_person = current_time - self.last_person_time + + if (self.current_state == 'LOW' and + time_since_last_person >= self.delay_seconds): + # 超过延迟时间且当前是低电平,恢复高电平 + self._set_gpio_high() + + def _set_gpio_low(self): + """设置 GPIO 为低电平""" + try: + # 修改配置文件 + self._update_config('false') + + # 调用 GPIO 程序 + result = subprocess.run( + [self.gpio_cmd], + capture_output=True, + text=True, + timeout=5 + ) + + if result.returncode == 0: + self.current_state = 'LOW' + print(f"[GPIO] 已切换到低电平 (检测到人)") + else: + print(f"[GPIO ERROR] 设置低电平失败: {result.stderr}") + + except Exception as e: + print(f"[GPIO ERROR] 设置低电平时发生异常: {e}") + + def _set_gpio_high(self): + """设置 GPIO 为高电平""" + try: + # 修改配置文件 + self._update_config('true') + + # 调用 GPIO 程序 + result = subprocess.run( + [self.gpio_cmd], + capture_output=True, + text=True, + timeout=5 + ) + + if result.returncode == 0: + self.current_state = 'HIGH' + print(f"[GPIO] 已恢复高电平 (延迟{self.delay_seconds}秒)") + else: + print(f"[GPIO ERROR] 设置高电平失败: {result.stderr}") + + except Exception as e: + print(f"[GPIO ERROR] 设置高电平时发生异常: {e}") + + def _update_config(self, value: str): + """ + 更新配置文件中的 outPutMode 值 + + Args: + value (str): 'true' 或 'false' + """ + try: + # 读取配置文件 + with open(self.config_file, 'r', encoding='utf-8') as f: + lines = f.readlines() + + # 修改 outPutMode 行 + modified = False + for i, line in enumerate(lines): + if line.strip().startswith('outPutMode'): + lines[i] = f"outPutMode:{value}\n" + modified = True + break + + # 如果没找到,追加一行 + if not modified: + lines.append(f"outPutMode:{value}\n") + + # 写回配置文件 + with open(self.config_file, 'w', encoding='utf-8') as f: + f.writelines(lines) + + print(f"[GPIO] 配置文件已更新: outPutMode={value}") + + except Exception as e: + print(f"[GPIO ERROR] 更新配置文件失败: {e}") + + def get_status(self) -> dict: + """ + 获取当前状态信息 + + Returns: + dict: 包含状态信息的字典 + """ + with self._lock: + return { + 'current_state': self.current_state, + 'last_person_time': self.last_person_time, + 'time_since_last_person': time.time() - self.last_person_time + } + + + +def process_single_detection(box, score, color_frame, depth_data, color_width, color_height, depth_width, depth_height): + """ + 处理单个检测目标,计算其距离并绘制可视化信息 + + Args: + box (np.ndarray): 边界框坐标 [x1, y1, x2, y2] + score (float): 检测置信度 + color_frame (np.ndarray): 彩色图像帧 + depth_data (np.ndarray): 深度数据 + color_width, color_height (int): 彩色图像尺寸 + depth_width, depth_height (int): 深度图像尺寸 + + Returns: + float: 计算得到的距离值 (米),如果无效则返回 NaN + """ + x1, y1, x2, y2 = map(int, box) # 边界框坐标 + center_x, center_y = (x1 + x2) // 2, (y1 + y2) // 2 # 中心点坐标 + + # 将彩色图像坐标映射到深度图像坐标 + depth_x = int(center_x / color_width * depth_width) + depth_y = int(center_y / color_height * depth_height) + + # 在中心点周围采样深度值 (提高准确性) + sample_x1 = max(depth_x - DEPTH_SAMPLE_RADIUS, 0) + sample_x2 = min(depth_x + DEPTH_SAMPLE_RADIUS + 1, depth_width) + sample_y1 = max(depth_y - DEPTH_SAMPLE_RADIUS, 0) + sample_y2 = min(depth_y + DEPTH_SAMPLE_RADIUS + 1, depth_height) + + depth_patch = depth_data[sample_y1:sample_y2, sample_x1:sample_x2] + + # 对深度数据进行中值滤波 (去除噪声) + if (depth_patch == 0).any(): # 如果有无效深度值 + depth_patch = cv2.medianBlur(depth_patch, DEPTH_FILTER_SIZE) + + # 计算有效深度值的平均距离 + valid_depths = depth_patch[depth_patch > 0].astype(np.float32) + if valid_depths.size > 0: + distance_meters = float(np.mean(valid_depths)) / 1000.0 # 转换为米 + else: + distance_meters = float('nan') # 无有效深度值 + + # 根据距离选择绘制颜色 + if math.isnan(distance_meters): + color = (0, 255, 255) # 未知距离: 黄色 + else: + if distance_meters < NEAR_THRESHOLD: + color = (0, 0, 255) # 近距离: 红色 + elif distance_meters < MID_THRESHOLD: + color = (0, 165, 255) # 中距离: 橙色 + elif distance_meters < MAX_DISTANCE: + color = (0, 255, 255) # 远距离: 黄色 + else: + color = (0, 255, 0) # 安全距离: 绿色 + + # 绘制边界框 + cv2.rectangle(color_frame, (x1, y1), (x2, y2), color, 2) + + # 绘制标签 (包含置信度和距离信息) + if not math.isnan(distance_meters): + label = f"person {score:.2f} {distance_meters:.2f}m" + else: + label = f"person {score:.2f} --m" + + # 计算标签位置 (避免超出图像边界) + label_y = max(y1 - 10, 20) + cv2.putText( + color_frame, + label, + (x1, label_y), + cv2.FONT_HERSHEY_SIMPLEX, + 0.6, + color, + 2 + ) + + return distance_meters + + +def calculate_zone_counts(distances): + """ + 计算各距离区域的检测框数量 + + Args: + distances (list): 检测到的距离列表 + + Returns: + list: [近距离数量, 中距离数量, 远距离数量] + """ + zone_counts = [0, 0, 0] # [近距离, 中距离, 远距离] + + for distance in distances: + if distance is None or not np.isfinite(distance) or distance >= MAX_DISTANCE: + continue # 跳过无效或安全距离 + + if distance < NEAR_THRESHOLD: + zone_counts[0] += 1 # 近距离区域 + elif distance < MID_THRESHOLD: + zone_counts[1] += 1 # 中距离区域 + else: + zone_counts[2] += 1 # 远距离区域 + + return zone_counts + + +def check_warning_conditions(current_counts, prev_counts): + """ + 检查是否需要触发报警保存 + + 报警条件: + 1. 任何区域的检测框数量增加 + 2. 检测框在不同区域间移动 (总数不变但分布变化) + + Args: + current_counts (list): 当前各区域检测框数量 + prev_counts (list): 上次各区域检测框数量 + + Returns: + bool: 是否需要保存报警截图 + """ + # 检查是否有区域检测框数量增加 + for i in range(3): + if current_counts[i] > prev_counts[i]: + return True + + # 检查是否有区域间移动 (总数相同但分布不同) + total_current = sum(current_counts) + total_prev = sum(prev_counts) + + if (total_current == total_prev and + total_current > 0 and + current_counts != prev_counts): + return True + + return False + + +def save_warning_snapshot(frame, start_time, current_counts, prev_counts, distances): + """ + 保存报警截图,包含详细的时间和检测信息 + + Args: + frame (np.ndarray): 当前帧图像 + start_time (datetime): 帧处理开始时间 (北京时间) + current_counts (list): 当前各区域检测框数量 + prev_counts (list): 上次各区域检测框数量 + distances (list): 检测到的距离列表 + """ + snapshot = frame.copy() + h_img, w_img = snapshot.shape[:2] + + # 计算处理结束时间和耗时 + end_time = get_beijing_time() + processing_ms = (end_time - start_time).total_seconds() * 1000.0 + + # 文本绘制基准位置 + base_y = h_img - 15 + line_spacing = 24 + text_color = (255, 255, 255) # 白色文字 + font = cv2.FONT_HERSHEY_SIMPLEX + font_scale = 0.6 + thickness = 2 + + # 绘制时间信息 (三行) + time_texts = [ + f"Start: {start_time.strftime('%H:%M:%S.%f')[:-3]}", + f"End: {end_time.strftime('%H:%M:%S.%f')[:-3]}", + f"Δt: {processing_ms:.1f} ms" + ] + + for i, text in enumerate(time_texts): + y_pos = base_y - (2 - i) * line_spacing + cv2.putText(snapshot, text, (10, y_pos), font, font_scale, text_color, thickness, cv2.LINE_AA) + + # 绘制检测框数量信息 + zone_info = [ + f"0-{NEAR_THRESHOLD:g}m: {current_counts[0]}", + f"{NEAR_THRESHOLD:g}-{MID_THRESHOLD:g}m: {current_counts[1]}", + f"{MID_THRESHOLD:g}-{MAX_DISTANCE:g}m: {current_counts[2]}" + ] + counts_text = f"Counts: {' | '.join(zone_info)}" + cv2.putText(snapshot, counts_text, (10, base_y + 30), font, font_scale, (0, 255, 255), thickness, cv2.LINE_AA) + + # 绘制区域变化信息 + change_info = [] + for i in range(3): + if current_counts[i] > prev_counts[i]: + change_info.append(f"+{current_counts[i] - prev_counts[i]} in zone {i}") + elif current_counts[i] < prev_counts[i]: + change_info.append(f"-{prev_counts[i] - current_counts[i]} in zone {i}") + + if change_info: + change_text = f"Changes: {', '.join(change_info)}" + cv2.putText(snapshot, change_text, (10, base_y + 60), font, font_scale, (0, 165, 255), thickness, cv2.LINE_AA) + + # 生成文件名并保存 + filename = start_time.strftime(WARNING_IMAGE_NAME_FORMAT) + file_path = os.path.join(WARNING_IMAGE_DIR, filename) + + # 应用画面翻转(用于保存) + save_snapshot = apply_frame_flip(snapshot) + + try: + cv2.imwrite(file_path, save_snapshot) + print(f"[INFO] 报警截图已保存: {filename}") + except Exception as e: + print(f"[ERROR] 保存报警截图失败: {e}") + + +def handle_video_recording(raw_writer, mark_writer, frame, raw_filename, mark_filename, fourcc): + """ + 处理视频录制,包括延迟初始化和帧写入 + + Args: + raw_writer, mark_writer: 视频写入器对象 + frame (np.ndarray): 当前帧 + raw_filename, mark_filename (str): 视频文件名 + fourcc: 视频编码器 + + Returns: + tuple: 更新后的 (raw_writer, mark_writer) + """ + if not ENABLE_VIDEO_RECORDING: + return raw_writer, mark_writer + + # 延迟初始化视频写入器 (在获得第一帧尺寸后) + if raw_writer is None: + height, width = frame.shape[:2] + + try: + raw_writer = cv2.VideoWriter( + os.path.join(VIDEO_SAVE_DIR, raw_filename), + fourcc, 30, (width, height) + ) + mark_writer = cv2.VideoWriter( + os.path.join(VIDEO_SAVE_DIR, mark_filename), + fourcc, 30, (width, height) + ) + print(f"[INFO] 视频录制已开始: {raw_filename}, {mark_filename}") + except Exception as e: + print(f"[ERROR] 视频写入器初始化失败: {e}") + return None, None + + # 写入帧数据 + if raw_writer and mark_writer: + try: + # 应用画面翻转(用于视频保存) + save_frame = apply_frame_flip(frame) + + # 注意: 此时 frame 已经包含检测标记,因此原始视频和标记视频是相同的 + # 如果需要真正的原始视频,应该在检测标记之前保存原始帧 + raw_writer.write(save_frame) # 原始视频 (实际包含标记) + mark_writer.write(save_frame) # 标记视频 + except Exception as e: + print(f"[ERROR] 视频帧写入失败: {e}") + + return raw_writer, mark_writer + + +def apply_frame_flip(frame): + """ + 根据配置应用画面翻转 + + Args: + frame (np.ndarray): 输入图像 + + Returns: + np.ndarray: 翻转后的图像 + """ + result_frame = frame.copy() + + # 应用水平翻转(镜像) + if FLIP_HORIZONTAL: + result_frame = cv2.flip(result_frame, 1) + + # 应用垂直翻转(上下翻转) + if FLIP_VERTICAL: + result_frame = cv2.flip(result_frame, 0) + + return result_frame + + +def draw_fps_info(frame, fps): + """ + 在图像上绘制 FPS 信息 + + Args: + frame (np.ndarray): 输入图像 + fps (float): 当前帧率 + """ + # 绘制 FPS 信息 + fps_text = f"FPS: {fps:.2f}" + cv2.putText( + frame, + fps_text, + (10, 30), + cv2.FONT_HERSHEY_SIMPLEX, + 1.0, + (255, 255, 0), # 黄色 + 2 + ) + + +def draw_warning_overlay(frame, distances): + """ + 根据检测到的距离绘制警告覆盖层 + + Args: + frame (np.ndarray): 输入图像 + distances (list): 检测到的距离列表 + """ + # 检查是否需要显示警告 + alert_needed = False + min_distance = float('inf') + + for distance in distances: + if np.isfinite(distance) and distance < MAX_DISTANCE: + alert_needed = True + if distance < min_distance: + min_distance = distance + + if alert_needed: + # 根据最近距离选择警告文本颜色 + if min_distance < NEAR_THRESHOLD: + warning_color = (0, 0, 255) # 红色 - 高危 + elif min_distance < MID_THRESHOLD: + warning_color = (0, 165, 255) # 橙色 - 中危 + else: + warning_color = (0, 255, 255) # 黄色 - 低危 + + # 绘制警告文本 + h_img, w_img = frame.shape[:2] + warning_text = "WARNING!" + + # 计算文本尺寸以居中显示 + font = cv2.FONT_HERSHEY_DUPLEX + font_scale = 2.0 + thickness = 6 + + (text_width, text_height), _ = cv2.getTextSize(warning_text, font, font_scale, thickness) + text_x = (w_img - text_width) // 2 + text_y = h_img // 2 + + cv2.putText(frame, warning_text, (text_x, text_y), font, font_scale, warning_color, thickness) + +def normalize_boxes(boxes: np.ndarray, w: int, h: int) -> np.ndarray: + """ + 将像素坐标的 boxes 归一化为 [0,1] 区间,格式仍为 [x1, y1, x2, y2] + """ + if boxes is None or boxes.size == 0: + return boxes + scale = np.array([w, h, w, h], dtype=np.float32) + return (boxes.astype(np.float32) / scale).clip(0.0, 1.0) + +def resize_cover(img, tw, th): + """ + 将 img 放大以覆盖目标尺寸 (tw, th),再居中裁剪到精确尺寸。 + 不保留边框(无 letterbox)。 + """ + ih, iw = img.shape[:2] + if iw == 0 or ih == 0: + return img + scale = max(tw / float(iw), th / float(ih)) + nw, nh = int(round(iw * scale)), int(round(ih * scale)) + resized = cv2.resize(img, (nw, nh), interpolation=cv2.INTER_LINEAR) + x0 = max((nw - tw) // 2, 0) + y0 = max((nh - th) // 2, 0) + return resized[y0:y0 + th, x0:x0 + tw] + + +# ============================== 多线程类定义 ============================== # + +class CaptureThread(threading.Thread): + """ + 图像采集线程类 + + 负责从彩色摄像头和深度传感器连续采集图像数据,并将其放入任务队列 + 供推理线程处理。该线程实现了生产者模式,是整个流水线的数据源。 + + 主要功能: + 1. 连续采集彩色帧和深度帧 + 2. 摄像头遮挡检测 (基于亮度和方差分析) + 3. 图像镜像处理 (对齐彩色和深度流) + 4. 队列管理 (防止队列溢出,保持实时性) + + Attributes: + cap: OpenCV 摄像头对象 + depth_stream: OpenNI 深度流对象 + depth_width, depth_height: 深度图像尺寸 + task_queue: 任务队列,用于传递采集的帧数据 + running: 线程运行状态控制标志 + """ + + def __init__(self, cap, depth_stream, depth_size, task_queue: queue.Queue): + """ + 初始化图像采集线程 + + Args: + cap: OpenCV 摄像头对象,用于采集彩色图像 + depth_stream: OpenNI 深度流对象,用于采集深度数据 + depth_size (tuple): 深度图像尺寸,格式为 (width, height) + task_queue (queue.Queue): 任务队列,用于传递采集的帧数据到推理线程 + """ + super().__init__(daemon=True) # 设置为守护线程,主程序退出时自动结束 + self.cap = cap + self.depth_stream = depth_stream + self.depth_width, self.depth_height = depth_size + self.task_queue = task_queue + self.running = True # 线程运行状态标志 + print("[INFO] 图像采集线程已初始化") + + def run(self): + """ + 线程主循环,持续采集图像数据 + + 执行流程: + 1. 读取彩色帧并进行镜像翻转 + 2. 执行摄像头遮挡检测 + 3. 读取深度帧数据 + 4. 管理任务队列 (防止溢出) + 5. 将帧数据放入队列供推理线程处理 + """ + while self.running: + # 读取彩色帧 + ret, color_frame = self.cap.read() + if not ret: + print("[WARN] 无法读取彩色帧,跳过当前循环...") + continue + + # 水平翻转以对齐深度流 (原始彩色流与深度流为镜像画面) + color_frame = cv2.flip(color_frame, 1) + + # 摄像头遮挡检测 (基于图像质量分析) + self._detect_camera_occlusion(color_frame) + + # 读取深度帧数据 + depth_frame = self.depth_stream.read_frame() + depth_data = np.ndarray( + (self.depth_height, self.depth_width), + dtype=np.uint16, + buffer=depth_frame.get_buffer_as_uint16() + ) + + # 队列管理: 如果队列已满,移除最旧的帧以保持实时性 + if self.task_queue.full(): + try: + self.task_queue.get_nowait() # 非阻塞获取并丢弃最旧的帧 + print("[DEBUG] 任务队列已满,丢弃旧帧以保持实时性") + except queue.Empty: + pass + + # 将新采集的帧数据放入队列 + self.task_queue.put((color_frame, depth_data)) + + def _detect_camera_occlusion(self, frame): + """ + 检测摄像头是否被遮挡 + + 通过分析图像的亮度和方差来判断摄像头是否被遮挡或存在异常。 + 检测原理: + - 亮度过低: 可能被不透明物体遮挡 + - 方差过小: 画面过于均匀,可能被单色物体遮 + + Args: + frame (np.ndarray): 输入的彩色图像帧 + """ + # 转换为灰度图以简化计算 + gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + + # 计算图像质量指标 + mean_brightness = gray_frame.mean() # 平均亮度 + std_dev = gray_frame.std() # 标准差 (反映图像对比度) + + # 检测遮挡条件 + if mean_brightness < BRIGHTNESS_THRESHOLD or std_dev < VARIANCE_THRESHOLD: + print(f"[WARN] 检测到摄像头画面可能被遮挡!") + print(f" 亮度值: {mean_brightness:.1f} (阈值: {BRIGHTNESS_THRESHOLD})") + print(f" 方差值: {std_dev:.1f} (阈值: {VARIANCE_THRESHOLD})") + + def stop(self): + """停止图像采集线程""" + self.running = False + print("[INFO] 图像采集线程停止信号已发送") + + +class InferenceThread(threading.Thread): + """ + 推理线程类 + + 每个推理线程绑定一颗 NPU 核心,从任务队列获取帧数据进行 YOLOv11 模型推理。 + 该线程实现了消费者-生产者模式中的处理环节,是整个系统的核心计算单元。 + + 主要功能: + 1. NPU 模型加载和初始化 + 2. 图像预处理 (letterbox 缩放、颜色空间转换) + 3. 模型推理执行 + 4. 后处理和结果传递 + + Attributes: + core_id: 绑定的 NPU 核心 ID (0, 1, 2) + task_queue: 任务队列,获取待推理的帧数据 + result_queue: 结果队列,存放推理结果 + helper: COCO 数据集辅助工具 + model: RKNN 模型容器 + input_blob: 预分配的输入缓冲区 + running: 线程运行状态控制标志 + """ + + def __init__(self, npu_core: int, task_queue: queue.Queue, result_queue: queue.Queue, helper: COCO_test_helper): + """ + 初始化推理线程 + + Args: + npu_core (int): 绑定的 NPU 核心ID (0, 1, 2) + task_queue (queue.Queue): 任务队列,获取待推理的帧数据 + result_queue (queue.Queue): 结果队列,存放推理结果 + helper (COCO_test_helper): COCO 数据集辅助工具,用于图像预处理 + """ + super().__init__(daemon=True) # 设置为守护线程 + self.core_id = npu_core + self.task_queue = task_queue + self.result_queue = result_queue + self.helper = helper + self.running = True + + print(f"[INFO] NPU-{self.core_id}: 正在加载 RKNN 模型...") + + # 为当前 NPU 核心加载 RKNN 模型 + try: + self.model = RKNN_model_container(MODEL_PATH, self.core_id) + print(f"[INFO] NPU-{self.core_id}: 模型加载成功") + except Exception as e: + print(f"[ERROR] NPU-{self.core_id}: 模型加载失败 - {e}") + raise + + # 预分配输入缓冲区以避免重复内存分配 (性能优化) + self.input_blob = np.zeros((1, IMG_SIZE[0], IMG_SIZE[1], 3), dtype=np.uint8) + + def run(self): + """ + 线程主循环,持续进行模型推理 + + 执行流程: + 1. 从任务队列获取帧数据 + 2. 图像预处理 (letterbox 缩放、颜色空间转换) + 3. 执行 NPU 模型推理 + 4. 后处理解析网络输出 + 5. 将结果放入结果队列 + """ + while self.running: + try: + # 从任务队列获取帧数据 (超时 0.1 秒避免死锁) + color_frame, depth_data = self.task_queue.get(timeout=0.1) + except queue.Empty: + continue # 队列为空时继续等待 + + # 执行推理流程 + try: + # 步骤1: 图像预处理 + processed_image = self._preprocess_image(color_frame) + + # 步骤2: 执行模型推理 + model_outputs = self.model.run([processed_image]) + + # 步骤3: 后处理解析结果 + boxes, classes, scores = post_process(model_outputs) + + # 步骤4: 将结果放入结果队列 + result_data = (color_frame, depth_data, boxes, classes, scores) + self.result_queue.put(result_data) + + except Exception as e: + print(f"[ERROR] NPU-{self.core_id}: 推理过程失败 - {e}") + continue + + def _preprocess_image(self, frame): + """ + 图像预处理函数 + + 执行YOLOv11模型所需的图像预处理步骤: + 1. letterbox 缩放到模型输入尺寸 (保持宽高比) + 2. 颜色空间转换 BGR → RGB + 3. 数据类型转换和内存布局调整 + + Args: + frame (np.ndarray): 输入的彩色图像帧 (BGR格式) + + Returns: + np.ndarray: 预处理后的图像数据,准备输入模型 + """ + # letterbox 缩放: 保持宽高比的情况下缩放到目标尺寸,不足部分用黑色填充 + letterbox_image = self.helper.letter_box( + frame, + new_shape=(IMG_SIZE[1], IMG_SIZE[0]), # (width, height) + pad_color=(0, 0, 0) # 黑色填充 + ) + + # 颜色空间转换: OpenCV默认是BGR,模型需要RGB + rgb_image = cv2.cvtColor(letterbox_image, cv2.COLOR_BGR2RGB) + + # 将处理后的图像放入预分配的缓冲区 + self.input_blob[0] = rgb_image + + return self.input_blob + + def stop(self): + """停止推理线程""" + self.running = False + print(f"[INFO] NPU-{self.core_id}: 推理线程停止信号已发送") + +# ============================== WebSocket 距离上报线程 ============================== # + +# WebSocket 依赖库检查 +try: + import websocket # websocket-client 库 +except ImportError: + raise ImportError("请先安装 websocket‑client 库:pip install websocket-client") + + +class DistanceUploaderWS(threading.Thread): + """ + WebSocket 距离上报线程类 + + 负责维护与远程服务器的 WebSocket 连接,并按固定间隔上报检测到的最近距离数据。 + 该线程采用后台运行模式,不会阻塞主程序的正常执行。 + + 主要功能: + 1. 自动建立和维护 WebSocket 连接 + 2. 连接断开时自动重连 + 3. 距离数据的队列化管理和节流控制 + 4. JSON 格式数据传输 + 5. 错误处理和异常恢复 + + Attributes: + url (str): WebSocket 服务器地址 + distance_queue (queue.Queue): 距离数据队列 + _stop_event (threading.Event): 线程停止事件 + ws (websocket.WebSocket): WebSocket 连接对象 + last_sent_time (float): 上次发送数据的时间戳 + """ + + def __init__(self, url: str = WS_URL): + """ + 初始化 WebSocket 上报线程 + + Args: + url (str): WebSocket 服务器地址,默认使用全局配置中的 WS_URL + """ + super().__init__(name="DistanceUploaderWS", daemon=True) + self.url = url + self.distance_queue: "queue.Queue[float]" = queue.Queue() # 距离数据队列 + self._stop_event = threading.Event() # 线程停止控制事件 + self.ws = None # WebSocket 连接对象 + self.last_sent_time = 0.0 # 上次发送时间戳 (用于节流控制) + + print(f"[INFO] WebSocket 上报线程已初始化,目标地址: {self.url}") + + def send_distance(self, distance: float): + """ + 发送距离数据到队列 + + 该方法线程安全,可以从任意线程调用。只接受有限的浮点数值, + 会自动过滤无效数据 (NaN, 无穷大等)。 + + Args: + distance (float): 距离值 (米),必须是有限的浮点数 + """ + if distance is not None and np.isfinite(distance): + try: + self.distance_queue.put_nowait(distance) # 非阻塞放入队列 + except queue.Full: + # 队列满时丢弃新数据,保持实时性 + print("[DEBUG] 距离数据队列已满,丢弃新数据") + + def run(self): + """ + 线程主循环,维护 WebSocket 连接并发送距离数据 + + 执行流程: + 1. 检查并建立/维护 WebSocket 连接 + 2. 从队列获取距离数据 + 3. 执行节流控制 (避免发送过于频繁) + 4. 构造 JSON 数据包并发送 + 5. 异常处理和自动重连 + """ + while not self._stop_event.is_set(): + try: + # 步骤1: 确保 WebSocket 连接可用 + self._ensure_connection() + + # 步骤2: 获取距离数据 (超时 0.1 秒) + try: + distance = self.distance_queue.get(timeout=0.1) + except queue.Empty: + continue + + # 步骤3: 节流控制 + current_time = time.time() + if current_time - self.last_sent_time < WS_REPORT_INTERVAL: + # 间隔太短,清空队列中的旧数据,只保留最新值 + self._flush_old_data() + continue + + # 步骤4: 构造并发送 JSON 数据包 + self._send_distance_data(distance) + self.last_sent_time = current_time + + except Exception as e: + # 任何异常都会触发连接重置,确保系统稳定性 + print(f"[ERROR] WebSocket 上报过程中发生异常: {e}") + self._reset_connection() + time.sleep(1) # 异常后短暂等待 + + def _ensure_connection(self): + """ + 确保 WebSocket 连接可用 + + 如果连接不存在或已断开,会尝试建立新连接。 + 连接建立失败时会抛出异常,由主循环处理。 + """ + if self.ws is None: + print(f"[INFO] 正在建立 WebSocket 连接: {self.url}") + self.ws = websocket.create_connection(self.url, timeout=5) + print("[INFO] WebSocket 连接建立成功") + + def _flush_old_data(self): + """ + 清空队列中的旧数据,只保留最新的距离值 + + 该方法用于实现节流控制,避免在短时间内发送过多数据。 + """ + latest_distance = None + while not self.distance_queue.empty(): + try: + latest_distance = self.distance_queue.get_nowait() + except queue.Empty: + break + + # 如果有最新数据,重新放回队列 + if latest_distance is not None: + try: + self.distance_queue.put_nowait(latest_distance) + except queue.Full: + pass # 队列满时直接丢弃 + + def _send_distance_data(self, distance: float): + """ + 发送距离数据到 WebSocket 服务器 + + Args: + distance (float): 距离值 (米) + + Raises: + Exception: WebSocket 发送失败时抛出异常 + """ + # 构造 JSON 数据包 + beijing_time = get_beijing_time() + payload = { + "distance": round(float(distance), 2), # 距离值,保留2位小数 + "timestamp": beijing_time.isoformat(), # 北京时间 ISO 格式 + "source": "yolov11_depth_detector" # 数据源标识 + } + + # 发送 JSON 数据 + json_data = json.dumps(payload, ensure_ascii=False) + self.ws.send(json_data) + + print(f"[DEBUG] 已发送距离数据: {distance:.2f}m @ {beijing_time.strftime('%H:%M:%S')}") + + def _reset_connection(self): + """ + 重置 WebSocket 连接 + + 安全地关闭现有连接并重置连接对象,为重连做准备。 + """ + if self.ws is not None: + try: + self.ws.close() + except Exception as e: + print(f"[DEBUG] 关闭 WebSocket 连接时出现异常: {e}") + finally: + self.ws = None + print("[INFO] WebSocket 连接已重置") + + def stop(self): + """ + 停止 WebSocket 上报线程 + + 设置停止事件并安全关闭 WebSocket 连接。 + 该方法是线程安全的,可以从任意线程调用。 + """ + print("[INFO] 正在停止 WebSocket 上报线程...") + self._stop_event.set() # 设置停止事件 + self._reset_connection() # 关闭连接 + print("[INFO] WebSocket 上报线程已停止") + +# ============================== 主程序入口 ============================== # + +def main(): + """ + 主函数:初始化设备、创建线程、运行检测循环 + """ + print("[INFO] 开始初始化 YOLOv11 + 深度检测系统...") + + # ==================== 配置验证 ==================== # + print("[INFO] 验证配置参数...") + + # 验证模型文件存在性 + if not os.path.exists(MODEL_PATH): + print(f"[ERROR] 模型文件不存在: {MODEL_PATH}") + print("[HINT] 请检查 .env 文件中的 MODEL_PATH 配置") + sys.exit(1) + + # 验证 OpenNI 库路径 + if not os.path.exists(OPENNI_LIB_PATH): + print(f"[ERROR] OpenNI 库路径不存在: {OPENNI_LIB_PATH}") + print("[HINT] 请检查 .env 文件中的 OPENNI_LIB_PATH 配置") + sys.exit(1) + + # 验证保存目录权限 + try: + os.makedirs(WARNING_IMAGE_DIR, exist_ok=True) + os.makedirs(VIDEO_SAVE_DIR, exist_ok=True) + print(f"[INFO] 保存目录已准备: {WARNING_IMAGE_DIR}, {VIDEO_SAVE_DIR}") + except PermissionError as e: + print(f"[ERROR] 无法创建保存目录: {e}") + print("[HINT] 请检查目录权限或修改 .env 文件中的保存路径") + sys.exit(1) + + # 验证 NPU 核心配置 + if not NPU_CORES: + print("[ERROR] NPU 核心配置为空") + print("[HINT] 请检查 .env 文件中的 NPU_CORES 配置") + sys.exit(1) + + # 验证阈值配置的合理性 + if not (0.0 < OBJ_THRESH < 1.0): + print(f"[ERROR] 置信度阈值配置错误: {OBJ_THRESH}") + print("[HINT] OBJ_THRESH 应该在 0.0 到 1.0 之间") + sys.exit(1) + + if not (0.0 < NMS_THRESH < 1.0): + print(f"[ERROR] NMS 阈值配置错误: {NMS_THRESH}") + print("[HINT] NMS_THRESH 应该在 0.0 到 1.0 之间") + sys.exit(1) + + print("[INFO] 配置验证通过") + + # ==================== 设备初始化 ==================== # + # 检查 OpenNI 库路径是否存在 + if not os.path.exists(OPENNI_LIB_PATH): + print(f"[ERROR] OpenNI 库路径不存在: {OPENNI_LIB_PATH}") + sys.exit(1) + + # 初始化 OpenNI 库 + print("[INFO] 正在初始化 OpenNI 库...") + openni2.initialize(OPENNI_LIB_PATH) + + # 打开深度摄像头设备 + print("[INFO] 正在打开深度摄像头设备...") + device = openni2.Device.open_any() + + # 创建并启动深度流 + depth_stream = device.create_depth_stream() + depth_stream.start() + depth_mode = depth_stream.get_video_mode() + depth_width = depth_mode.resolutionX + depth_height = depth_mode.resolutionY + print(f"[INFO] 深度流已启动,分辨率: {depth_width}x{depth_height}") + + # 初始化彩色摄像头 + print("[INFO] 正在初始化彩色摄像头...") + cap = cv2.VideoCapture(0, cv2.CAP_V4L2) # 使用 V4L2 后端 + cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*"MJPG")) # 设置 MJPG 编码以提高性能 + + if not cap.isOpened(): + print("[ERROR] 无法打开彩色摄像头 /dev/video0") + sys.exit(1) + + # 获取彩色图像尺寸 + color_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + color_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + print(f"[INFO] 彩色摄像头已打开,分辨率: {color_width}x{color_height}") + + # ⭐ 准备报警和视频保存目录 + os.makedirs(WARNING_IMAGE_DIR, exist_ok=True) + os.makedirs(VIDEO_SAVE_DIR, exist_ok=True) + # 准备视频文件名 + ts = time.localtime() + raw_video_filename = time.strftime(RAW_VIDEO_NAME_FORMAT, ts) + mark_video_filename = time.strftime(MARK_VIDEO_NAME_FORMAT, ts) + raw_writer = None + mark_writer = None + fourcc = cv2.VideoWriter_fourcc(*"mp4v") + + # ==================== 队列和辅助工具初始化 ==================== # + # 创建任务队列和结果队列 + task_queue = queue.Queue(maxsize=CAP_QUEUE_SIZE) # 采集→推理队列 + result_queue = queue.Queue(maxsize=RES_QUEUE_SIZE) # 推理→渲染队列 + + # 初始化 COCO 数据集辅助工具 + helper = COCO_test_helper(enable_letter_box=True) + print("[INFO] COCO 辅助工具已初始化") + + # ==================== 线程创建与启动 ==================== # + # 创建并启动图像采集线程 + capture_thread = CaptureThread( + cap, + depth_stream, + (depth_width, depth_height), + task_queue + ) + capture_thread.start() + + # NPU 可用性检测和推理线程创建 + print("[INFO] 正在检测 NPU 可用性...") + valid_cores = [] + + for core in NPU_CORES: + try: + # 尝试创建模型容器以检测 NPU 可用性 + test_model = RKNN_model_container(MODEL_PATH, core) + valid_cores.append(core) + del test_model # 释放测试用的模型 + print(f"[INFO] NPU-{core}: 可用") + except Exception as e: + print(f"[WARN] NPU-{core}: 初始化失败,跳过 - {e}") + + # 创建推理线程(每个可用的 NPU 核心一个线程) + inference_workers = [] + for core in valid_cores: + worker = InferenceThread(core, task_queue, result_queue, helper) + worker.start() + inference_workers.append(worker) + + if not inference_workers: + print("[ERROR] 没有可用的 NPU 核心,程序退出") + sys.exit(1) + + print(f"[INFO] 成功启动 {len(inference_workers)} 个推理线程") + + # ⭐ 启动 WebSocket 上报线程 + uploader = DistanceUploaderWS(WS_URL) + uploader.start() + print("[INFO] WebSocket 上报线程已启动") + + + # ⭐ 新增:初始化 GPIO 控制器 + gpio_controller = GPIOController( + gpio_cmd=GPIO_CMD_PATH, + config_file=GPIO_CONFIG_FILE, + delay_seconds=GPIO_DELAY_SECONDS + ) + + print("[INFO] GPIO 控制器已启动") + + # ==================== 主渲染循环 ==================== # + # 创建显示窗口 + cv2.namedWindow("YOLOv11 Depth Demo", cv2.WINDOW_NORMAL) + cv2.setWindowProperty("YOLOv11 Depth Demo", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) + + # ⭐ 新增:获取全屏窗口可绘制区域尺寸(用来做 cover) + try: + _, _, win_w, win_h = cv2.getWindowImageRect(WIN_NAME) + except Exception: + # 少数平台若不支持该 API,可给一个兜底尺寸(如 1920x1080) + win_w, win_h = 1920, 1080 + + # 初始化 FPS 计算 + prev_time = time.perf_counter() + frame_count = 0 + + print("[INFO] 开始主渲染循环,按 'q' 键退出...") + + # 距离区域检测框数量管理初始化 + prev_zone_counts = [0, 0, 0] # 上一次各区域的检测框数量 + last_save_time = 0.0 # 上次保存报警截图的时间 + + # FPS 统计工具类实例 + fps_stats = FPSStatistics() if FPS_STATS_ENABLED else None + + try: + while True: + + frame_start_wall = get_beijing_time() + + try: + # 从结果队列获取推理结果(超时 50ms) + frame, depth_raw, boxes, classes, scores = result_queue.get(timeout=0.05) + except queue.Empty: + continue # 没有结果时继续等待 + + # ==================== 结果绘制 ==================== # + if boxes is not None: + # 将检测框从模型坐标系转换回原图坐标系 + boxes = helper.get_real_box(boxes) + + # 筛选出人体检测结果 + person_mask = classes == PERSON_CLASS_ID + person_boxes = boxes[person_mask] + person_scores = scores[person_mask] + + # ⭐ 新增:判断是否检测到人 + if len(person_boxes) > 0: + person_detected = True + + # ⭐ 新增:更新 GPIO 状态 + gpio_controller.update(person_detected) + + # ⭐ 新增:归一化坐标 [0,1](相对原始 color_width/height) + norm_person_boxes = normalize_boxes(person_boxes, color_width, color_height) + + # 准备距离收集列表 + distances = [] + + # 绘制每个检测到的人体 + for box, score in zip(person_boxes, person_scores): + distance_meters = process_single_detection(box, score, frame, depth_raw, color_width, color_height, depth_width, depth_height) + + # 收集距离用于报警和上报 + if not math.isnan(distance_meters): + distances.append(distance_meters) + + # ⭐ Send distance via WebSocket (最近距离) + if len(distances) > 0: + valid_dists = [d for d in distances if np.isfinite(d)] + if valid_dists: + uploader.send_distance(min(valid_dists)) + + # ⭐ 绘制警告覆盖层 + draw_warning_overlay(frame, distances) + + # ⭐ 统计当前各距离区域的检测框数量 + current_zone_counts = calculate_zone_counts(distances) + + # ⭐ 检查是否有区域检测框数量变化(增加或区域间移动) + save_needed = check_warning_conditions(current_zone_counts, prev_zone_counts) + + # ⭐ 保存报警图片(如果有变化) + now_time = time.time() + if save_needed and (now_time - last_save_time >= WARNING_SNAPSHOT_INTERVAL): + save_warning_snapshot(frame, frame_start_wall, current_zone_counts, prev_zone_counts, distances) + last_save_time = now_time + + # 更新检测框数量 + prev_zone_counts = current_zone_counts + + # ⭐ 保存原始帧和标记帧到视频 + raw_writer, mark_writer = handle_video_recording(raw_writer, mark_writer, frame, raw_video_filename, mark_video_filename, fourcc) + + # ==================== FPS 计算和显示 ==================== # + current_time = time.perf_counter() + fps = 1.0 / (current_time - prev_time) + prev_time = current_time + frame_count += 1 + + # 更新 FPS 统计 + if fps_stats: + fps_stats.update(fps) + + # 绘制 FPS 信息 + draw_fps_info(frame, fps) + + # 每100帧输出一次统计信息 + if frame_count % 100 == 0: + print(f"[INFO] 已处理 {frame_count} 帧,当前 FPS: {fps:.2f}") + + # 应用画面翻转(仅用于显示) + display_frame = apply_frame_flip(frame) + + # ⭐ 新增:定期刷新窗口尺寸(多屏/切分辨率时更稳) + if frame_count % 60 == 0: + try: + _, _, win_w, win_h = cv2.getWindowImageRect(WIN_NAME) + except Exception: + pass + + # ⭐ 关键一步:把显示帧按窗口全屏尺寸做 cover,去除白边 + display_frame = resize_cover(display_frame, win_w, win_h) + + # 显示图像 + cv2.imshow("YOLOv11 Depth Demo", display_frame) + + # 检查退出键 + if cv2.waitKey(1) & 0xFF == ord('q'): + print("[INFO] 检测到退出信号") + break + + except KeyboardInterrupt: + print("\n[INFO] 收到键盘中断信号") + + finally: + # ==================== 资源清理 ==================== # + print("[INFO] 正在清理资源...") + + + # ⭐ 新增:复位 GPIO 到高电平 + try: + gpio_controller._update_config('true') + subprocess.run([GPIO_CMD_PATH], timeout=5) + print("[INFO] GPIO 已复位到高电平") + except Exception as e: + print(f"[WARN] GPIO 复位失败: {e}") + +cv2.destroyAllWindows() + + # 停止所有线程 + capture_thread.stop() + capture_thread.join(timeout=2.0) + + for worker in inference_workers: + worker.stop() + worker.join(timeout=2.0) + + # 释放设备资源 + cap.release() + depth_stream.stop() + device.close() + openni2.unload() + + # 释放视频写入器 + if raw_writer is not None: + raw_writer.release() + mark_writer.release() + # 停止 WebSocket 上报线程 + uploader.stop() + uploader.join(timeout=1) + + cv2.destroyAllWindows() + # 打印 FPS 统计报告 + if FPS_STATS_ENABLED and fps_stats: + fps_stats.print_statistics() + print("[INFO] 程序已安全退出") + +def apply_command_line_args(args): + """ + 根据命令行参数修改全局配置 + + Args: + args: 命令行参数对象 + """ + global ENABLE_GUI, ENABLE_VIDEO_RECORDING, FPS_STATS_ENABLED + + if args.no_gui: + ENABLE_GUI = False + + if args.no_video: + ENABLE_VIDEO_RECORDING = False + + if args.no_fps_stats: + FPS_STATS_ENABLED = False + +if __name__ == "__main__": + """ + 程序入口点 + + 检查运行环境并启动主程序。支持命令行参数控制GUI显示模式。 + """ + import argparse + + # 创建命令行参数解析器 + parser = argparse.ArgumentParser( + description="YOLOv11 深度检测系统", + formatter_class=argparse.RawDescriptionHelpFormatter, + epilog=""" +示例用法: + python ob_yolo_rknn.py # 启动GUI模式 + python ob_yolo_rknn.py --no-gui # 启动无头模式 + python ob_yolo_rknn.py --no-video # 禁用视频录制 + python ob_yolo_rknn.py --no-fps-stats # 禁用FPS统计 + """ + ) + + # 添加命令行参数 + parser.add_argument( + '--no-gui', + action='store_true', + help='禁用GUI显示,以无头模式运行' + ) + parser.add_argument( + '--no-video', + action='store_true', + help='禁用视频录制功能' + ) + parser.add_argument( + '--no-fps-stats', + action='store_true', + help='禁用FPS统计功能' + ) + + # 解析命令行参数 + args = parser.parse_args() + + # 应用命令行参数配置 + apply_command_line_args(args) + + # 显示配置变更信息 + if args.no_gui: + print("[INFO] GUI 显示已禁用 (命令行参数)") + + if args.no_video: + print("[INFO] 视频录制已禁用 (命令行参数)") + + if args.no_fps_stats: + print("[INFO] FPS 统计已禁用 (命令行参数)") + + # 显示启动信息 + gui_status = "启用" if ENABLE_GUI else "禁用 (无头模式)" + video_status = "启用" if ENABLE_VIDEO_RECORDING else "禁用" + fps_status = "启用" if FPS_STATS_ENABLED else "禁用" + beijing_time_str = format_beijing_timestamp() + + print(f""" +======================================== + YOLOv11 深度检测系统 v2.0 +======================================== +配置信息: +- GUI 显示: {gui_status} +- 视频录制: {video_status} +- FPS 统计: {fps_status} +- NPU 核心: {NPU_CORES} +- 模型路径: {MODEL_PATH} +- 深度库路径: {OPENNI_LIB_PATH} +- 北京时间: {beijing_time_str} +======================================== + """) + + try: + # 启动主程序 + main() + except Exception as e: + print(f"\n[CRITICAL ERROR] 程序运行时发生严重错误:") + print(f"[ERROR] {type(e).__name__}: {e}") + print("\n[DEBUG] 请检查以下项目:") + print("1. 硬件连接 (摄像头、深度传感器)") + print("2. 库文件路径配置") + print("3. RKNN 模型文件") + print("4. 系统权限设置") + print("5. NPU 驱动状态") + sys.exit(1) diff --git a/InitAuth/conf/.env b/InitAuth/conf/.env index 9921c4a..5b9904a 100644 --- a/InitAuth/conf/.env +++ b/InitAuth/conf/.env @@ -4,5 +4,5 @@ UUID:null #以下配置用于获取云端发送秘钥 ServerPwd:"17227ca72f30f8bca8158bb78f25b43e" -#以下配置存储报警输出高低电平 -outSignal:low \ No newline at end of file +#以下配置存储GPIO输出高低电平--状态机 +outPutMode:false diff --git a/PyApp/upload.log b/PyApp/upload.log index d6bbb56..4131916 100644 --- a/PyApp/upload.log +++ b/PyApp/upload.log @@ -6555,3 +6555,2424 @@ 2025-10-31 11:03:53 - 使用经纬度上传: lon=1201, lat=3129 2025-10-31 11:03:54 - 数据库插入成功 2025-10-31 11:03:54 - 上传线程结束: /mnt/save/warning/warning_20251031_110352.jpg: 成功! +2025-10-31 12:40:21 - 开始上传图片: /mnt/save/warning/warning_20251031_124021.jpg +2025-10-31 12:40:22 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:23 - 数据库插入成功 +2025-10-31 12:40:23 - 上传线程结束: /mnt/save/warning/warning_20251031_124021.jpg: 成功! +2025-10-31 12:40:23 - 开始上传图片: /mnt/save/warning/warning_20251031_124022.jpg +2025-10-31 12:40:23 - 开始上传图片: /mnt/save/warning/warning_20251031_124023.jpg +2025-10-31 12:40:24 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:25 - 数据库插入成功 +2025-10-31 12:40:25 - 上传线程结束: /mnt/save/warning/warning_20251031_124023.jpg: 成功! +2025-10-31 12:40:25 - 开始上传图片: /mnt/save/warning/warning_20251031_124024.jpg +2025-10-31 12:40:25 - 开始上传图片: /mnt/save/warning/warning_20251031_124025.jpg +2025-10-31 12:40:25 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:26 - 数据库插入成功 +2025-10-31 12:40:26 - 上传线程结束: /mnt/save/warning/warning_20251031_124022.jpg: 成功! +2025-10-31 12:40:26 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:27 - 数据库插入成功 +2025-10-31 12:40:27 - 上传线程结束: /mnt/save/warning/warning_20251031_124024.jpg: 成功! +2025-10-31 12:40:27 - 开始上传图片: /mnt/save/warning/warning_20251031_124026.jpg +2025-10-31 12:40:27 - 开始上传图片: /mnt/save/warning/warning_20251031_124027.jpg +2025-10-31 12:40:27 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:28 - 数据库插入成功 +2025-10-31 12:40:28 - 上传线程结束: /mnt/save/warning/warning_20251031_124025.jpg: 成功! +2025-10-31 12:40:28 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:29 - 数据库插入成功 +2025-10-31 12:40:29 - 上传线程结束: /mnt/save/warning/warning_20251031_124026.jpg: 成功! +2025-10-31 12:40:29 - 开始上传图片: /mnt/save/warning/warning_20251031_124028.jpg +2025-10-31 12:40:29 - 开始上传图片: /mnt/save/warning/warning_20251031_124029.jpg +2025-10-31 12:40:29 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:30 - 数据库插入成功 +2025-10-31 12:40:30 - 上传线程结束: /mnt/save/warning/warning_20251031_124027.jpg: 成功! +2025-10-31 12:40:30 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:31 - 数据库插入成功 +2025-10-31 12:40:31 - 上传线程结束: /mnt/save/warning/warning_20251031_124029.jpg: 成功! +2025-10-31 12:40:31 - 开始上传图片: /mnt/save/warning/warning_20251031_124030.jpg +2025-10-31 12:40:31 - 开始上传图片: /mnt/save/warning/warning_20251031_124031.jpg +2025-10-31 12:40:31 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:32 - 数据库插入成功 +2025-10-31 12:40:32 - 上传线程结束: /mnt/save/warning/warning_20251031_124028.jpg: 成功! +2025-10-31 12:40:32 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:33 - 数据库插入成功 +2025-10-31 12:40:33 - 上传线程结束: /mnt/save/warning/warning_20251031_124031.jpg: 成功! +2025-10-31 12:40:33 - 开始上传图片: /mnt/save/warning/warning_20251031_124032.jpg +2025-10-31 12:40:33 - 开始上传图片: /mnt/save/warning/warning_20251031_124033.jpg +2025-10-31 12:40:33 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:34 - 数据库插入成功 +2025-10-31 12:40:34 - 上传线程结束: /mnt/save/warning/warning_20251031_124030.jpg: 成功! +2025-10-31 12:40:34 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:35 - 数据库插入成功 +2025-10-31 12:40:35 - 上传线程结束: /mnt/save/warning/warning_20251031_124033.jpg: 成功! +2025-10-31 12:40:35 - 开始上传图片: /mnt/save/warning/warning_20251031_124035.jpg +2025-10-31 12:40:35 - 开始上传图片: /mnt/save/warning/warning_20251031_124034.jpg +2025-10-31 12:40:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:36 - 数据库插入成功 +2025-10-31 12:40:36 - 上传线程结束: /mnt/save/warning/warning_20251031_124032.jpg: 成功! +2025-10-31 12:40:36 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:37 - 数据库插入成功 +2025-10-31 12:40:37 - 上传线程结束: /mnt/save/warning/warning_20251031_124034.jpg: 成功! +2025-10-31 12:40:37 - 开始上传图片: /mnt/save/warning/warning_20251031_124037.jpg +2025-10-31 12:40:37 - 开始上传图片: /mnt/save/warning/warning_20251031_124036.jpg +2025-10-31 12:40:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:38 - 数据库插入成功 +2025-10-31 12:40:38 - 上传线程结束: /mnt/save/warning/warning_20251031_124035.jpg: 成功! +2025-10-31 12:40:38 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:39 - 数据库插入成功 +2025-10-31 12:40:39 - 上传线程结束: /mnt/save/warning/warning_20251031_124036.jpg: 成功! +2025-10-31 12:40:39 - 开始上传图片: /mnt/save/warning/warning_20251031_124039.jpg +2025-10-31 12:40:39 - 开始上传图片: /mnt/save/warning/warning_20251031_124038.jpg +2025-10-31 12:40:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:40 - 数据库插入成功 +2025-10-31 12:40:40 - 上传线程结束: /mnt/save/warning/warning_20251031_124037.jpg: 成功! +2025-10-31 12:40:40 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:41 - 数据库插入成功 +2025-10-31 12:40:41 - 上传线程结束: /mnt/save/warning/warning_20251031_124039.jpg: 成功! +2025-10-31 12:40:41 - 开始上传图片: /mnt/save/warning/warning_20251031_124041.jpg +2025-10-31 12:40:41 - 开始上传图片: /mnt/save/warning/warning_20251031_124040.jpg +2025-10-31 12:40:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:42 - 数据库插入成功 +2025-10-31 12:40:42 - 上传线程结束: /mnt/save/warning/warning_20251031_124038.jpg: 成功! +2025-10-31 12:40:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:43 - 数据库插入成功 +2025-10-31 12:40:43 - 上传线程结束: /mnt/save/warning/warning_20251031_124041.jpg: 成功! +2025-10-31 12:40:43 - 开始上传图片: /mnt/save/warning/warning_20251031_124042.jpg +2025-10-31 12:40:43 - 开始上传图片: /mnt/save/warning/warning_20251031_124043.jpg +2025-10-31 12:40:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:44 - 数据库插入成功 +2025-10-31 12:40:44 - 上传线程结束: /mnt/save/warning/warning_20251031_124040.jpg: 成功! +2025-10-31 12:40:44 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:45 - 数据库插入成功 +2025-10-31 12:40:45 - 上传线程结束: /mnt/save/warning/warning_20251031_124043.jpg: 成功! +2025-10-31 12:40:45 - 开始上传图片: /mnt/save/warning/warning_20251031_124045.jpg +2025-10-31 12:40:45 - 开始上传图片: /mnt/save/warning/warning_20251031_124044.jpg +2025-10-31 12:40:45 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:46 - 数据库插入成功 +2025-10-31 12:40:46 - 上传线程结束: /mnt/save/warning/warning_20251031_124042.jpg: 成功! +2025-10-31 12:40:46 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:47 - 数据库插入成功 +2025-10-31 12:40:47 - 上传线程结束: /mnt/save/warning/warning_20251031_124044.jpg: 成功! +2025-10-31 12:40:47 - 开始上传图片: /mnt/save/warning/warning_20251031_124047.jpg +2025-10-31 12:40:47 - 开始上传图片: /mnt/save/warning/warning_20251031_124046.jpg +2025-10-31 12:40:47 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:48 - 数据库插入成功 +2025-10-31 12:40:48 - 上传线程结束: /mnt/save/warning/warning_20251031_124045.jpg: 成功! +2025-10-31 12:40:48 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:49 - 数据库插入成功 +2025-10-31 12:40:49 - 上传线程结束: /mnt/save/warning/warning_20251031_124047.jpg: 成功! +2025-10-31 12:40:49 - 开始上传图片: /mnt/save/warning/warning_20251031_124048.jpg +2025-10-31 12:40:49 - 开始上传图片: /mnt/save/warning/warning_20251031_124049.jpg +2025-10-31 12:40:49 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:50 - 数据库插入成功 +2025-10-31 12:40:50 - 上传线程结束: /mnt/save/warning/warning_20251031_124046.jpg: 成功! +2025-10-31 12:40:50 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:51 - 数据库插入成功 +2025-10-31 12:40:51 - 上传线程结束: /mnt/save/warning/warning_20251031_124049.jpg: 成功! +2025-10-31 12:40:51 - 开始上传图片: /mnt/save/warning/warning_20251031_124051.jpg +2025-10-31 12:40:51 - 开始上传图片: /mnt/save/warning/warning_20251031_124050.jpg +2025-10-31 12:40:51 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:52 - 数据库插入成功 +2025-10-31 12:40:52 - 上传线程结束: /mnt/save/warning/warning_20251031_124048.jpg: 成功! +2025-10-31 12:40:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:53 - 数据库插入成功 +2025-10-31 12:40:53 - 上传线程结束: /mnt/save/warning/warning_20251031_124051.jpg: 成功! +2025-10-31 12:40:53 - 开始上传图片: /mnt/save/warning/warning_20251031_124052.jpg +2025-10-31 12:40:54 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:54 - 数据库插入成功 +2025-10-31 12:40:54 - 上传线程结束: /mnt/save/warning/warning_20251031_124050.jpg: 成功! +2025-10-31 12:40:55 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:55 - 数据库插入成功 +2025-10-31 12:40:55 - 上传线程结束: /mnt/save/warning/warning_20251031_124052.jpg: 成功! +2025-10-31 12:40:55 - 开始上传图片: /mnt/save/warning/warning_20251031_124054.jpg +2025-10-31 12:40:57 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:57 - 数据库插入成功 +2025-10-31 12:40:57 - 上传线程结束: /mnt/save/warning/warning_20251031_124054.jpg: 成功! +2025-10-31 12:40:57 - 开始上传图片: /mnt/save/warning/warning_20251031_124056.jpg +2025-10-31 12:40:57 - 开始上传图片: /mnt/save/warning/warning_20251031_124057.jpg +2025-10-31 12:40:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:40:59 - 数据库插入成功 +2025-10-31 12:40:59 - 上传线程结束: /mnt/save/warning/warning_20251031_124056.jpg: 成功! +2025-10-31 12:40:59 - 开始上传图片: /mnt/save/warning/warning_20251031_124058.jpg +2025-10-31 12:40:59 - 开始上传图片: /mnt/save/warning/warning_20251031_124059.jpg +2025-10-31 12:41:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:41:00 - 数据库插入成功 +2025-10-31 12:41:00 - 上传线程结束: /mnt/save/warning/warning_20251031_124057.jpg: 成功! +2025-10-31 12:41:01 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:41:01 - 数据库插入成功 +2025-10-31 12:41:01 - 上传线程结束: /mnt/save/warning/warning_20251031_124059.jpg: 成功! +2025-10-31 12:41:01 - 开始上传图片: /mnt/save/warning/warning_20251031_124100.jpg +2025-10-31 12:41:02 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:41:02 - 数据库插入成功 +2025-10-31 12:41:02 - 上传线程结束: /mnt/save/warning/warning_20251031_124058.jpg: 成功! +2025-10-31 12:41:03 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:41:03 - 数据库插入成功 +2025-10-31 12:41:03 - 上传线程结束: /mnt/save/warning/warning_20251031_124100.jpg: 成功! +2025-10-31 12:44:36 - 开始上传图片: /mnt/save/warning/warning_20251031_124435.jpg +2025-10-31 12:44:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:38 - 数据库插入成功 +2025-10-31 12:44:38 - 上传线程结束: /mnt/save/warning/warning_20251031_124435.jpg: 成功! +2025-10-31 12:44:38 - 开始上传图片: /mnt/save/warning/warning_20251031_124438.jpg +2025-10-31 12:44:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:40 - 数据库插入成功 +2025-10-31 12:44:40 - 上传线程结束: /mnt/save/warning/warning_20251031_124438.jpg: 成功! +2025-10-31 12:44:40 - 开始上传图片: /mnt/save/warning/warning_20251031_124440.jpg +2025-10-31 12:44:40 - 开始上传图片: /mnt/save/warning/warning_20251031_124439.jpg +2025-10-31 12:44:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:42 - 数据库插入成功 +2025-10-31 12:44:42 - 上传线程结束: /mnt/save/warning/warning_20251031_124439.jpg: 成功! +2025-10-31 12:44:42 - 开始上传图片: /mnt/save/warning/warning_20251031_124442.jpg +2025-10-31 12:44:42 - 开始上传图片: /mnt/save/warning/warning_20251031_124441.jpg +2025-10-31 12:44:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:43 - 数据库插入成功 +2025-10-31 12:44:43 - 上传线程结束: /mnt/save/warning/warning_20251031_124440.jpg: 成功! +2025-10-31 12:44:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:44 - 数据库插入成功 +2025-10-31 12:44:44 - 上传线程结束: /mnt/save/warning/warning_20251031_124441.jpg: 成功! +2025-10-31 12:44:44 - 开始上传图片: /mnt/save/warning/warning_20251031_124443.jpg +2025-10-31 12:44:44 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:45 - 数据库插入成功 +2025-10-31 12:44:45 - 上传线程结束: /mnt/save/warning/warning_20251031_124442.jpg: 成功! +2025-10-31 12:44:45 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:46 - 数据库插入成功 +2025-10-31 12:44:46 - 上传线程结束: /mnt/save/warning/warning_20251031_124443.jpg: 成功! +2025-10-31 12:44:46 - 开始上传图片: /mnt/save/warning/warning_20251031_124445.jpg +2025-10-31 12:44:47 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:48 - 数据库插入成功 +2025-10-31 12:44:48 - 上传线程结束: /mnt/save/warning/warning_20251031_124445.jpg: 成功! +2025-10-31 12:44:48 - 开始上传图片: /mnt/save/warning/warning_20251031_124447.jpg +2025-10-31 12:44:48 - 开始上传图片: /mnt/save/warning/warning_20251031_124446.jpg +2025-10-31 12:44:48 - 开始上传图片: /mnt/save/warning/warning_20251031_124448.jpg +2025-10-31 12:44:49 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:50 - 数据库插入成功 +2025-10-31 12:44:50 - 上传线程结束: /mnt/save/warning/warning_20251031_124447.jpg: 成功! +2025-10-31 12:44:50 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:51 - 数据库插入成功 +2025-10-31 12:44:51 - 上传线程结束: /mnt/save/warning/warning_20251031_124446.jpg: 成功! +2025-10-31 12:44:51 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:52 - 数据库插入成功 +2025-10-31 12:44:52 - 上传线程结束: /mnt/save/warning/warning_20251031_124448.jpg: 成功! +2025-10-31 12:44:52 - 开始上传图片: /mnt/save/warning/warning_20251031_124450.jpg +2025-10-31 12:44:52 - 开始上传图片: /mnt/save/warning/warning_20251031_124451.jpg +2025-10-31 12:44:52 - 开始上传图片: /mnt/save/warning/warning_20251031_124452.jpg +2025-10-31 12:44:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:54 - 数据库插入成功 +2025-10-31 12:44:54 - 上传线程结束: /mnt/save/warning/warning_20251031_124451.jpg: 成功! +2025-10-31 12:44:54 - 开始上传图片: /mnt/save/warning/warning_20251031_124454.jpg +2025-10-31 12:44:54 - 开始上传图片: /mnt/save/warning/warning_20251031_124453.jpg +2025-10-31 12:44:54 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:55 - 数据库插入成功 +2025-10-31 12:44:55 - 上传线程结束: /mnt/save/warning/warning_20251031_124450.jpg: 成功! +2025-10-31 12:44:55 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:56 - 数据库插入成功 +2025-10-31 12:44:56 - 上传线程结束: /mnt/save/warning/warning_20251031_124452.jpg: 成功! +2025-10-31 12:44:56 - 开始上传图片: /mnt/save/warning/warning_20251031_124455.jpg +2025-10-31 12:44:56 - 开始上传图片: /mnt/save/warning/warning_20251031_124456.jpg +2025-10-31 12:44:56 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:57 - 数据库插入成功 +2025-10-31 12:44:57 - 上传线程结束: /mnt/save/warning/warning_20251031_124453.jpg: 成功! +2025-10-31 12:44:57 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:58 - 数据库插入成功 +2025-10-31 12:44:58 - 上传线程结束: /mnt/save/warning/warning_20251031_124454.jpg: 成功! +2025-10-31 12:44:58 - 开始上传图片: /mnt/save/warning/warning_20251031_124458.jpg +2025-10-31 12:44:58 - 开始上传图片: /mnt/save/warning/warning_20251031_124457.jpg +2025-10-31 12:44:58 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:44:59 - 数据库插入成功 +2025-10-31 12:44:59 - 上传线程结束: /mnt/save/warning/warning_20251031_124456.jpg: 成功! +2025-10-31 12:44:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:00 - 数据库插入成功 +2025-10-31 12:45:00 - 上传线程结束: /mnt/save/warning/warning_20251031_124455.jpg: 成功! +2025-10-31 12:45:00 - 开始上传图片: /mnt/save/warning/warning_20251031_124500.jpg +2025-10-31 12:45:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:01 - 数据库插入成功 +2025-10-31 12:45:01 - 上传线程结束: /mnt/save/warning/warning_20251031_124457.jpg: 成功! +2025-10-31 12:45:01 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:02 - 数据库插入成功 +2025-10-31 12:45:02 - 上传线程结束: /mnt/save/warning/warning_20251031_124458.jpg: 成功! +2025-10-31 12:45:02 - 开始上传图片: /mnt/save/warning/warning_20251031_124501.jpg +2025-10-31 12:45:02 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:03 - 数据库插入成功 +2025-10-31 12:45:03 - 上传线程结束: /mnt/save/warning/warning_20251031_124500.jpg: 成功! +2025-10-31 12:45:03 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:04 - 数据库插入成功 +2025-10-31 12:45:04 - 上传线程结束: /mnt/save/warning/warning_20251031_124501.jpg: 成功! +2025-10-31 12:45:04 - 开始上传图片: /mnt/save/warning/warning_20251031_124502.jpg +2025-10-31 12:45:05 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:06 - 数据库插入成功 +2025-10-31 12:45:06 - 上传线程结束: /mnt/save/warning/warning_20251031_124502.jpg: 成功! +2025-10-31 12:45:06 - 开始上传图片: /mnt/save/warning/warning_20251031_124506.jpg +2025-10-31 12:45:06 - 开始上传图片: /mnt/save/warning/warning_20251031_124505.jpg +2025-10-31 12:45:07 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:08 - 数据库插入成功 +2025-10-31 12:45:08 - 上传线程结束: /mnt/save/warning/warning_20251031_124505.jpg: 成功! +2025-10-31 12:45:08 - 开始上传图片: /mnt/save/warning/warning_20251031_124507.jpg +2025-10-31 12:45:08 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:09 - 数据库插入成功 +2025-10-31 12:45:09 - 上传线程结束: /mnt/save/warning/warning_20251031_124506.jpg: 成功! +2025-10-31 12:45:09 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:10 - 数据库插入成功 +2025-10-31 12:45:10 - 上传线程结束: /mnt/save/warning/warning_20251031_124507.jpg: 成功! +2025-10-31 12:45:10 - 开始上传图片: /mnt/save/warning/warning_20251031_124510.jpg +2025-10-31 12:45:10 - 开始上传图片: /mnt/save/warning/warning_20251031_124508.jpg +2025-10-31 12:45:10 - 开始上传图片: /mnt/save/warning/warning_20251031_124509.jpg +2025-10-31 12:45:11 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:12 - 数据库插入成功 +2025-10-31 12:45:12 - 上传线程结束: /mnt/save/warning/warning_20251031_124508.jpg: 成功! +2025-10-31 12:45:12 - 开始上传图片: /mnt/save/warning/warning_20251031_124512.jpg +2025-10-31 12:45:12 - 开始上传图片: /mnt/save/warning/warning_20251031_124511.jpg +2025-10-31 12:45:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:13 - 数据库插入成功 +2025-10-31 12:45:13 - 上传线程结束: /mnt/save/warning/warning_20251031_124510.jpg: 成功! +2025-10-31 12:45:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:14 - 数据库插入成功 +2025-10-31 12:45:14 - 上传线程结束: /mnt/save/warning/warning_20251031_124509.jpg: 成功! +2025-10-31 12:45:14 - 开始上传图片: /mnt/save/warning/warning_20251031_124514.jpg +2025-10-31 12:45:14 - 开始上传图片: /mnt/save/warning/warning_20251031_124513.jpg +2025-10-31 12:45:14 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:15 - 数据库插入成功 +2025-10-31 12:45:15 - 上传线程结束: /mnt/save/warning/warning_20251031_124511.jpg: 成功! +2025-10-31 12:45:15 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:16 - 数据库插入成功 +2025-10-31 12:45:16 - 上传线程结束: /mnt/save/warning/warning_20251031_124512.jpg: 成功! +2025-10-31 12:45:16 - 开始上传图片: /mnt/save/warning/warning_20251031_124516.jpg +2025-10-31 12:45:16 - 开始上传图片: /mnt/save/warning/warning_20251031_124515.jpg +2025-10-31 12:45:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:17 - 数据库插入成功 +2025-10-31 12:45:17 - 上传线程结束: /mnt/save/warning/warning_20251031_124514.jpg: 成功! +2025-10-31 12:45:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:18 - 数据库插入成功 +2025-10-31 12:45:18 - 上传线程结束: /mnt/save/warning/warning_20251031_124513.jpg: 成功! +2025-10-31 12:45:18 - 开始上传图片: /mnt/save/warning/warning_20251031_124518.jpg +2025-10-31 12:45:18 - 开始上传图片: /mnt/save/warning/warning_20251031_124517.jpg +2025-10-31 12:45:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:19 - 数据库插入成功 +2025-10-31 12:45:19 - 上传线程结束: /mnt/save/warning/warning_20251031_124515.jpg: 成功! +2025-10-31 12:45:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:20 - 数据库插入成功 +2025-10-31 12:45:20 - 上传线程结束: /mnt/save/warning/warning_20251031_124516.jpg: 成功! +2025-10-31 12:45:20 - 开始上传图片: /mnt/save/warning/warning_20251031_124519.jpg +2025-10-31 12:45:20 - 开始上传图片: /mnt/save/warning/warning_20251031_124520.jpg +2025-10-31 12:45:20 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:21 - 数据库插入成功 +2025-10-31 12:45:21 - 上传线程结束: /mnt/save/warning/warning_20251031_124518.jpg: 成功! +2025-10-31 12:45:21 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:22 - 数据库插入成功 +2025-10-31 12:45:22 - 上传线程结束: /mnt/save/warning/warning_20251031_124517.jpg: 成功! +2025-10-31 12:45:22 - 开始上传图片: /mnt/save/warning/warning_20251031_124521.jpg +2025-10-31 12:45:22 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:23 - 数据库插入成功 +2025-10-31 12:45:23 - 上传线程结束: /mnt/save/warning/warning_20251031_124520.jpg: 成功! +2025-10-31 12:45:23 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:24 - 数据库插入成功 +2025-10-31 12:45:24 - 上传线程结束: /mnt/save/warning/warning_20251031_124519.jpg: 成功! +2025-10-31 12:45:24 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:45:25 - 数据库插入成功 +2025-10-31 12:45:25 - 上传线程结束: /mnt/save/warning/warning_20251031_124521.jpg: 成功! +2025-10-31 12:46:57 - 开始上传图片: /mnt/save/warning/warning_20251031_124656.jpg +2025-10-31 12:46:58 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:46:58 - 数据库插入成功 +2025-10-31 12:46:58 - 上传线程结束: /mnt/save/warning/warning_20251031_124656.jpg: 成功! +2025-10-31 12:46:59 - 开始上传图片: /mnt/save/warning/warning_20251031_124658.jpg +2025-10-31 12:46:59 - 开始上传图片: /mnt/save/warning/warning_20251031_124657.jpg +2025-10-31 12:47:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:47:00 - 数据库插入成功 +2025-10-31 12:47:00 - 上传线程结束: /mnt/save/warning/warning_20251031_124658.jpg: 成功! +2025-10-31 12:47:01 - 开始上传图片: /mnt/save/warning/warning_20251031_124659.jpg +2025-10-31 12:47:01 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:47:01 - 数据库插入成功 +2025-10-31 12:47:01 - 上传线程结束: /mnt/save/warning/warning_20251031_124657.jpg: 成功! +2025-10-31 12:47:02 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:47:02 - 数据库插入成功 +2025-10-31 12:47:02 - 上传线程结束: /mnt/save/warning/warning_20251031_124659.jpg: 成功! +2025-10-31 12:47:03 - 开始上传图片: /mnt/save/warning/warning_20251031_124701.jpg +2025-10-31 12:47:04 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 12:47:04 - 数据库插入成功 +2025-10-31 12:47:04 - 上传线程结束: /mnt/save/warning/warning_20251031_124701.jpg: 成功! +2025-10-31 13:00:48 - 开始上传图片: /mnt/save/warning/warning_20251031_130046.jpg +2025-10-31 13:00:48 - 开始上传图片: /mnt/save/warning/warning_20251031_130047.jpg +2025-10-31 13:00:49 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:00:49 - 数据库插入成功 +2025-10-31 13:00:49 - 上传线程结束: /mnt/save/warning/warning_20251031_130046.jpg: 成功! +2025-10-31 13:00:50 - 开始上传图片: /mnt/save/warning/warning_20251031_130049.jpg +2025-10-31 13:00:50 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:00:50 - 数据库插入成功 +2025-10-31 13:00:50 - 上传线程结束: /mnt/save/warning/warning_20251031_130047.jpg: 成功! +2025-10-31 13:00:51 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:00:51 - 数据库插入成功 +2025-10-31 13:00:51 - 上传线程结束: /mnt/save/warning/warning_20251031_130049.jpg: 成功! +2025-10-31 13:00:52 - 开始上传图片: /mnt/save/warning/warning_20251031_130050.jpg +2025-10-31 13:00:52 - 开始上传图片: /mnt/save/warning/warning_20251031_130052.jpg +2025-10-31 13:00:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:00:53 - 数据库插入成功 +2025-10-31 13:00:53 - 上传线程结束: /mnt/save/warning/warning_20251031_130052.jpg: 成功! +2025-10-31 13:00:54 - 开始上传图片: /mnt/save/warning/warning_20251031_130053.jpg +2025-10-31 13:00:54 - 开始上传图片: /mnt/save/warning/warning_20251031_130054.jpg +2025-10-31 13:00:54 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:00:54 - 数据库插入成功 +2025-10-31 13:00:54 - 上传线程结束: /mnt/save/warning/warning_20251031_130050.jpg: 成功! +2025-10-31 13:00:55 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:00:55 - 数据库插入成功 +2025-10-31 13:00:55 - 上传线程结束: /mnt/save/warning/warning_20251031_130054.jpg: 成功! +2025-10-31 13:00:56 - 开始上传图片: /mnt/save/warning/warning_20251031_130055.jpg +2025-10-31 13:00:56 - 开始上传图片: /mnt/save/warning/warning_20251031_130056.jpg +2025-10-31 13:00:56 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:00:56 - 数据库插入成功 +2025-10-31 13:00:56 - 上传线程结束: /mnt/save/warning/warning_20251031_130053.jpg: 成功! +2025-10-31 13:00:57 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:00:57 - 数据库插入成功 +2025-10-31 13:00:57 - 上传线程结束: /mnt/save/warning/warning_20251031_130055.jpg: 成功! +2025-10-31 13:00:58 - 开始上传图片: /mnt/save/warning/warning_20251031_130057.jpg +2025-10-31 13:00:58 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:00:58 - 数据库插入成功 +2025-10-31 13:00:58 - 上传线程结束: /mnt/save/warning/warning_20251031_130056.jpg: 成功! +2025-10-31 13:00:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:00:59 - 数据库插入成功 +2025-10-31 13:00:59 - 上传线程结束: /mnt/save/warning/warning_20251031_130057.jpg: 成功! +2025-10-31 13:01:00 - 开始上传图片: /mnt/save/warning/warning_20251031_130059.jpg +2025-10-31 13:01:00 - 开始上传图片: /mnt/save/warning/warning_20251031_130058.jpg +2025-10-31 13:01:01 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:01 - 数据库插入成功 +2025-10-31 13:01:01 - 上传线程结束: /mnt/save/warning/warning_20251031_130058.jpg: 成功! +2025-10-31 13:01:02 - 开始上传图片: /mnt/save/warning/warning_20251031_130101.jpg +2025-10-31 13:01:02 - 开始上传图片: /mnt/save/warning/warning_20251031_130100.jpg +2025-10-31 13:01:02 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:02 - 数据库插入成功 +2025-10-31 13:01:02 - 上传线程结束: /mnt/save/warning/warning_20251031_130059.jpg: 成功! +2025-10-31 13:01:03 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:03 - 数据库插入成功 +2025-10-31 13:01:03 - 上传线程结束: /mnt/save/warning/warning_20251031_130101.jpg: 成功! +2025-10-31 13:01:04 - 开始上传图片: /mnt/save/warning/warning_20251031_130103.jpg +2025-10-31 13:01:04 - 开始上传图片: /mnt/save/warning/warning_20251031_130102.jpg +2025-10-31 13:01:04 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:04 - 数据库插入成功 +2025-10-31 13:01:04 - 上传线程结束: /mnt/save/warning/warning_20251031_130100.jpg: 成功! +2025-10-31 13:01:05 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:05 - 数据库插入成功 +2025-10-31 13:01:05 - 上传线程结束: /mnt/save/warning/warning_20251031_130103.jpg: 成功! +2025-10-31 13:01:06 - 开始上传图片: /mnt/save/warning/warning_20251031_130105.jpg +2025-10-31 13:01:06 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:06 - 数据库插入成功 +2025-10-31 13:01:06 - 上传线程结束: /mnt/save/warning/warning_20251031_130102.jpg: 成功! +2025-10-31 13:01:07 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:07 - 数据库插入成功 +2025-10-31 13:01:07 - 上传线程结束: /mnt/save/warning/warning_20251031_130105.jpg: 成功! +2025-10-31 13:01:08 - 开始上传图片: /mnt/save/warning/warning_20251031_130106.jpg +2025-10-31 13:01:09 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:09 - 数据库插入成功 +2025-10-31 13:01:09 - 上传线程结束: /mnt/save/warning/warning_20251031_130106.jpg: 成功! +2025-10-31 13:01:10 - 开始上传图片: /mnt/save/warning/warning_20251031_130110.jpg +2025-10-31 13:01:10 - 开始上传图片: /mnt/save/warning/warning_20251031_130109.jpg +2025-10-31 13:01:11 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:11 - 数据库插入成功 +2025-10-31 13:01:11 - 上传线程结束: /mnt/save/warning/warning_20251031_130110.jpg: 成功! +2025-10-31 13:01:12 - 开始上传图片: /mnt/save/warning/warning_20251031_130111.jpg +2025-10-31 13:01:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:12 - 数据库插入成功 +2025-10-31 13:01:12 - 上传线程结束: /mnt/save/warning/warning_20251031_130109.jpg: 成功! +2025-10-31 13:01:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:13 - 数据库插入成功 +2025-10-31 13:01:13 - 上传线程结束: /mnt/save/warning/warning_20251031_130111.jpg: 成功! +2025-10-31 13:01:14 - 开始上传图片: /mnt/save/warning/warning_20251031_130112.jpg +2025-10-31 13:01:14 - 开始上传图片: /mnt/save/warning/warning_20251031_130113.jpg +2025-10-31 13:01:15 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:15 - 数据库插入成功 +2025-10-31 13:01:15 - 上传线程结束: /mnt/save/warning/warning_20251031_130113.jpg: 成功! +2025-10-31 13:01:16 - 开始上传图片: /mnt/save/warning/warning_20251031_130114.jpg +2025-10-31 13:01:16 - 开始上传图片: /mnt/save/warning/warning_20251031_130115.jpg +2025-10-31 13:01:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:16 - 数据库插入成功 +2025-10-31 13:01:16 - 上传线程结束: /mnt/save/warning/warning_20251031_130112.jpg: 成功! +2025-10-31 13:01:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:17 - 数据库插入成功 +2025-10-31 13:01:17 - 上传线程结束: /mnt/save/warning/warning_20251031_130114.jpg: 成功! +2025-10-31 13:01:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:18 - 数据库插入成功 +2025-10-31 13:01:18 - 上传线程结束: /mnt/save/warning/warning_20251031_130115.jpg: 成功! +2025-10-31 13:01:22 - 开始上传图片: /mnt/save/warning/warning_20251031_130121.jpg +2025-10-31 13:01:23 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:23 - 数据库插入成功 +2025-10-31 13:01:23 - 上传线程结束: /mnt/save/warning/warning_20251031_130121.jpg: 成功! +2025-10-31 13:01:24 - 开始上传图片: /mnt/save/warning/warning_20251031_130122.jpg +2025-10-31 13:01:24 - 开始上传图片: /mnt/save/warning/warning_20251031_130124.jpg +2025-10-31 13:01:25 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:25 - 数据库插入成功 +2025-10-31 13:01:25 - 上传线程结束: /mnt/save/warning/warning_20251031_130122.jpg: 成功! +2025-10-31 13:01:26 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:26 - 数据库插入成功 +2025-10-31 13:01:26 - 上传线程结束: /mnt/save/warning/warning_20251031_130124.jpg: 成功! +2025-10-31 13:01:28 - 开始上传图片: /mnt/save/warning/warning_20251031_130127.jpg +2025-10-31 13:01:29 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:29 - 数据库插入成功 +2025-10-31 13:01:29 - 上传线程结束: /mnt/save/warning/warning_20251031_130127.jpg: 成功! +2025-10-31 13:01:30 - 开始上传图片: /mnt/save/warning/warning_20251031_130130.jpg +2025-10-31 13:01:31 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:31 - 数据库插入成功 +2025-10-31 13:01:31 - 上传线程结束: /mnt/save/warning/warning_20251031_130130.jpg: 成功! +2025-10-31 13:01:32 - 开始上传图片: /mnt/save/warning/warning_20251031_130132.jpg +2025-10-31 13:01:32 - 开始上传图片: /mnt/save/warning/warning_20251031_130131.jpg +2025-10-31 13:01:33 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:33 - 数据库插入成功 +2025-10-31 13:01:33 - 上传线程结束: /mnt/save/warning/warning_20251031_130132.jpg: 成功! +2025-10-31 13:01:34 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:34 - 数据库插入成功 +2025-10-31 13:01:34 - 上传线程结束: /mnt/save/warning/warning_20251031_130131.jpg: 成功! +2025-10-31 13:01:36 - 开始上传图片: /mnt/save/warning/warning_20251031_130135.jpg +2025-10-31 13:01:36 - 开始上传图片: /mnt/save/warning/warning_20251031_130136.jpg +2025-10-31 13:01:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:37 - 数据库插入成功 +2025-10-31 13:01:37 - 上传线程结束: /mnt/save/warning/warning_20251031_130135.jpg: 成功! +2025-10-31 13:01:38 - 开始上传图片: /mnt/save/warning/warning_20251031_130138.jpg +2025-10-31 13:01:38 - 开始上传图片: /mnt/save/warning/warning_20251031_130137.jpg +2025-10-31 13:01:38 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:38 - 数据库插入成功 +2025-10-31 13:01:38 - 上传线程结束: /mnt/save/warning/warning_20251031_130136.jpg: 成功! +2025-10-31 13:01:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:39 - 数据库插入成功 +2025-10-31 13:01:39 - 上传线程结束: /mnt/save/warning/warning_20251031_130137.jpg: 成功! +2025-10-31 13:01:40 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:40 - 数据库插入成功 +2025-10-31 13:01:40 - 上传线程结束: /mnt/save/warning/warning_20251031_130138.jpg: 成功! +2025-10-31 13:01:42 - 开始上传图片: /mnt/save/warning/warning_20251031_130140.jpg +2025-10-31 13:01:42 - 开始上传图片: /mnt/save/warning/warning_20251031_130142.jpg +2025-10-31 13:01:42 - 开始上传图片: /mnt/save/warning/warning_20251031_130141.jpg +2025-10-31 13:01:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:43 - 数据库插入成功 +2025-10-31 13:01:43 - 上传线程结束: /mnt/save/warning/warning_20251031_130140.jpg: 成功! +2025-10-31 13:01:44 - 开始上传图片: /mnt/save/warning/warning_20251031_130144.jpg +2025-10-31 13:01:44 - 开始上传图片: /mnt/save/warning/warning_20251031_130143.jpg +2025-10-31 13:01:44 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:44 - 数据库插入成功 +2025-10-31 13:01:44 - 上传线程结束: /mnt/save/warning/warning_20251031_130141.jpg: 成功! +2025-10-31 13:01:45 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:45 - 数据库插入成功 +2025-10-31 13:01:45 - 上传线程结束: /mnt/save/warning/warning_20251031_130142.jpg: 成功! +2025-10-31 13:01:46 - 开始上传图片: /mnt/save/warning/warning_20251031_130145.jpg +2025-10-31 13:01:46 - 开始上传图片: /mnt/save/warning/warning_20251031_130146.jpg +2025-10-31 13:01:46 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:46 - 数据库插入成功 +2025-10-31 13:01:46 - 上传线程结束: /mnt/save/warning/warning_20251031_130144.jpg: 成功! +2025-10-31 13:01:47 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:47 - 数据库插入成功 +2025-10-31 13:01:47 - 上传线程结束: /mnt/save/warning/warning_20251031_130143.jpg: 成功! +2025-10-31 13:01:48 - 开始上传图片: /mnt/save/warning/warning_20251031_130148.jpg +2025-10-31 13:01:48 - 开始上传图片: /mnt/save/warning/warning_20251031_130147.jpg +2025-10-31 13:01:48 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:49 - 数据库插入成功 +2025-10-31 13:01:49 - 上传线程结束: /mnt/save/warning/warning_20251031_130145.jpg: 成功! +2025-10-31 13:01:49 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:49 - 数据库插入成功 +2025-10-31 13:01:49 - 上传线程结束: /mnt/save/warning/warning_20251031_130146.jpg: 成功! +2025-10-31 13:01:50 - 开始上传图片: /mnt/save/warning/warning_20251031_130150.jpg +2025-10-31 13:01:50 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:50 - 数据库插入成功 +2025-10-31 13:01:50 - 上传线程结束: /mnt/save/warning/warning_20251031_130148.jpg: 成功! +2025-10-31 13:01:51 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:51 - 数据库插入成功 +2025-10-31 13:01:51 - 上传线程结束: /mnt/save/warning/warning_20251031_130147.jpg: 成功! +2025-10-31 13:01:52 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:01:52 - 数据库插入成功 +2025-10-31 13:01:52 - 上传线程结束: /mnt/save/warning/warning_20251031_130150.jpg: 成功! +2025-10-31 13:02:14 - 开始上传图片: /mnt/save/warning/warning_20251031_130214.jpg +2025-10-31 13:02:15 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:02:16 - 数据库插入成功 +2025-10-31 13:02:16 - 上传线程结束: /mnt/save/warning/warning_20251031_130214.jpg: 成功! +2025-10-31 13:02:16 - 开始上传图片: /mnt/save/warning/warning_20251031_130216.jpg +2025-10-31 13:02:16 - 开始上传图片: /mnt/save/warning/warning_20251031_130215.jpg +2025-10-31 13:02:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:02:18 - 数据库插入成功 +2025-10-31 13:02:18 - 上传线程结束: /mnt/save/warning/warning_20251031_130216.jpg: 成功! +2025-10-31 13:02:18 - 开始上传图片: /mnt/save/warning/warning_20251031_130217.jpg +2025-10-31 13:02:18 - 开始上传图片: /mnt/save/warning/warning_20251031_130218.jpg +2025-10-31 13:02:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:02:19 - 数据库插入成功 +2025-10-31 13:02:19 - 上传线程结束: /mnt/save/warning/warning_20251031_130215.jpg: 成功! +2025-10-31 13:02:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:02:20 - 数据库插入成功 +2025-10-31 13:02:20 - 上传线程结束: /mnt/save/warning/warning_20251031_130217.jpg: 成功! +2025-10-31 13:02:20 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:02:21 - 数据库插入成功 +2025-10-31 13:02:21 - 上传线程结束: /mnt/save/warning/warning_20251031_130218.jpg: 成功! +2025-10-31 13:09:02 - 开始上传图片: /mnt/save/warning/warning_20251031_130902.jpg +2025-10-31 13:09:03 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:04 - 数据库插入成功 +2025-10-31 13:09:04 - 上传线程结束: /mnt/save/warning/warning_20251031_130902.jpg: 成功! +2025-10-31 13:09:04 - 开始上传图片: /mnt/save/warning/warning_20251031_130903.jpg +2025-10-31 13:09:04 - 开始上传图片: /mnt/save/warning/warning_20251031_130904.jpg +2025-10-31 13:09:05 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:06 - 数据库插入成功 +2025-10-31 13:09:06 - 上传线程结束: /mnt/save/warning/warning_20251031_130903.jpg: 成功! +2025-10-31 13:09:06 - 开始上传图片: /mnt/save/warning/warning_20251031_130905.jpg +2025-10-31 13:09:06 - 开始上传图片: /mnt/save/warning/warning_20251031_130906.jpg +2025-10-31 13:09:06 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:07 - 数据库插入成功 +2025-10-31 13:09:07 - 上传线程结束: /mnt/save/warning/warning_20251031_130904.jpg: 成功! +2025-10-31 13:09:07 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:08 - 数据库插入成功 +2025-10-31 13:09:08 - 上传线程结束: /mnt/save/warning/warning_20251031_130905.jpg: 成功! +2025-10-31 13:09:08 - 开始上传图片: /mnt/save/warning/warning_20251031_130908.jpg +2025-10-31 13:09:08 - 开始上传图片: /mnt/save/warning/warning_20251031_130907.jpg +2025-10-31 13:09:08 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:09 - 数据库插入成功 +2025-10-31 13:09:09 - 上传线程结束: /mnt/save/warning/warning_20251031_130906.jpg: 成功! +2025-10-31 13:09:09 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:10 - 数据库插入成功 +2025-10-31 13:09:10 - 上传线程结束: /mnt/save/warning/warning_20251031_130907.jpg: 成功! +2025-10-31 13:09:10 - 开始上传图片: /mnt/save/warning/warning_20251031_130910.jpg +2025-10-31 13:09:10 - 开始上传图片: /mnt/save/warning/warning_20251031_130909.jpg +2025-10-31 13:09:10 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:11 - 数据库插入成功 +2025-10-31 13:09:11 - 上传线程结束: /mnt/save/warning/warning_20251031_130908.jpg: 成功! +2025-10-31 13:09:11 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:12 - 数据库插入成功 +2025-10-31 13:09:12 - 上传线程结束: /mnt/save/warning/warning_20251031_130910.jpg: 成功! +2025-10-31 13:09:12 - 开始上传图片: /mnt/save/warning/warning_20251031_130911.jpg +2025-10-31 13:09:12 - 开始上传图片: /mnt/save/warning/warning_20251031_130912.jpg +2025-10-31 13:09:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:13 - 数据库插入成功 +2025-10-31 13:09:13 - 上传线程结束: /mnt/save/warning/warning_20251031_130909.jpg: 成功! +2025-10-31 13:09:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:14 - 数据库插入成功 +2025-10-31 13:09:14 - 上传线程结束: /mnt/save/warning/warning_20251031_130912.jpg: 成功! +2025-10-31 13:09:14 - 开始上传图片: /mnt/save/warning/warning_20251031_130914.jpg +2025-10-31 13:09:14 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:15 - 数据库插入成功 +2025-10-31 13:09:15 - 上传线程结束: /mnt/save/warning/warning_20251031_130911.jpg: 成功! +2025-10-31 13:09:15 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:16 - 数据库插入成功 +2025-10-31 13:09:16 - 上传线程结束: /mnt/save/warning/warning_20251031_130914.jpg: 成功! +2025-10-31 13:09:16 - 开始上传图片: /mnt/save/warning/warning_20251031_130915.jpg +2025-10-31 13:09:16 - 开始上传图片: /mnt/save/warning/warning_20251031_130916.jpg +2025-10-31 13:09:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:18 - 数据库插入成功 +2025-10-31 13:09:18 - 上传线程结束: /mnt/save/warning/warning_20251031_130915.jpg: 成功! +2025-10-31 13:09:18 - 开始上传图片: /mnt/save/warning/warning_20251031_130918.jpg +2025-10-31 13:09:18 - 开始上传图片: /mnt/save/warning/warning_20251031_130917.jpg +2025-10-31 13:09:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:19 - 数据库插入成功 +2025-10-31 13:09:19 - 上传线程结束: /mnt/save/warning/warning_20251031_130916.jpg: 成功! +2025-10-31 13:09:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:20 - 数据库插入成功 +2025-10-31 13:09:20 - 上传线程结束: /mnt/save/warning/warning_20251031_130918.jpg: 成功! +2025-10-31 13:09:20 - 开始上传图片: /mnt/save/warning/warning_20251031_130920.jpg +2025-10-31 13:09:20 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:21 - 数据库插入成功 +2025-10-31 13:09:21 - 上传线程结束: /mnt/save/warning/warning_20251031_130917.jpg: 成功! +2025-10-31 13:09:21 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:22 - 数据库插入成功 +2025-10-31 13:09:22 - 上传线程结束: /mnt/save/warning/warning_20251031_130920.jpg: 成功! +2025-10-31 13:09:22 - 开始上传图片: /mnt/save/warning/warning_20251031_130922.jpg +2025-10-31 13:09:23 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:24 - 数据库插入成功 +2025-10-31 13:09:24 - 上传线程结束: /mnt/save/warning/warning_20251031_130922.jpg: 成功! +2025-10-31 13:09:24 - 开始上传图片: /mnt/save/warning/warning_20251031_130924.jpg +2025-10-31 13:09:24 - 开始上传图片: /mnt/save/warning/warning_20251031_130923.jpg +2025-10-31 13:09:25 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:26 - 数据库插入成功 +2025-10-31 13:09:26 - 上传线程结束: /mnt/save/warning/warning_20251031_130923.jpg: 成功! +2025-10-31 13:09:26 - 开始上传图片: /mnt/save/warning/warning_20251031_130925.jpg +2025-10-31 13:09:26 - 开始上传图片: /mnt/save/warning/warning_20251031_130926.jpg +2025-10-31 13:09:26 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:27 - 数据库插入成功 +2025-10-31 13:09:27 - 上传线程结束: /mnt/save/warning/warning_20251031_130924.jpg: 成功! +2025-10-31 13:09:27 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:28 - 数据库插入成功 +2025-10-31 13:09:28 - 上传线程结束: /mnt/save/warning/warning_20251031_130925.jpg: 成功! +2025-10-31 13:09:28 - 开始上传图片: /mnt/save/warning/warning_20251031_130928.jpg +2025-10-31 13:09:28 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:29 - 数据库插入成功 +2025-10-31 13:09:29 - 上传线程结束: /mnt/save/warning/warning_20251031_130926.jpg: 成功! +2025-10-31 13:09:29 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:30 - 数据库插入成功 +2025-10-31 13:09:30 - 上传线程结束: /mnt/save/warning/warning_20251031_130928.jpg: 成功! +2025-10-31 13:09:30 - 开始上传图片: /mnt/save/warning/warning_20251031_130929.jpg +2025-10-31 13:09:30 - 开始上传图片: /mnt/save/warning/warning_20251031_130930.jpg +2025-10-31 13:09:31 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:32 - 数据库插入成功 +2025-10-31 13:09:32 - 上传线程结束: /mnt/save/warning/warning_20251031_130930.jpg: 成功! +2025-10-31 13:09:32 - 开始上传图片: /mnt/save/warning/warning_20251031_130931.jpg +2025-10-31 13:09:32 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:33 - 数据库插入成功 +2025-10-31 13:09:33 - 上传线程结束: /mnt/save/warning/warning_20251031_130929.jpg: 成功! +2025-10-31 13:09:33 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:34 - 数据库插入成功 +2025-10-31 13:09:34 - 上传线程结束: /mnt/save/warning/warning_20251031_130931.jpg: 成功! +2025-10-31 13:09:34 - 开始上传图片: /mnt/save/warning/warning_20251031_130932.jpg +2025-10-31 13:09:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:36 - 数据库插入成功 +2025-10-31 13:09:36 - 上传线程结束: /mnt/save/warning/warning_20251031_130932.jpg: 成功! +2025-10-31 13:09:36 - 开始上传图片: /mnt/save/warning/warning_20251031_130936.jpg +2025-10-31 13:09:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:38 - 数据库插入成功 +2025-10-31 13:09:38 - 上传线程结束: /mnt/save/warning/warning_20251031_130936.jpg: 成功! +2025-10-31 13:09:52 - 开始上传图片: /mnt/save/warning/warning_20251031_130952.jpg +2025-10-31 13:09:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:54 - 数据库插入成功 +2025-10-31 13:09:54 - 上传线程结束: /mnt/save/warning/warning_20251031_130952.jpg: 成功! +2025-10-31 13:09:54 - 开始上传图片: /mnt/save/warning/warning_20251031_130954.jpg +2025-10-31 13:09:54 - 开始上传图片: /mnt/save/warning/warning_20251031_130953.jpg +2025-10-31 13:09:55 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:56 - 数据库插入成功 +2025-10-31 13:09:56 - 上传线程结束: /mnt/save/warning/warning_20251031_130954.jpg: 成功! +2025-10-31 13:09:56 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:09:57 - 数据库插入成功 +2025-10-31 13:09:57 - 上传线程结束: /mnt/save/warning/warning_20251031_130953.jpg: 成功! +2025-10-31 13:09:58 - 开始上传图片: /mnt/save/warning/warning_20251031_130958.jpg +2025-10-31 13:09:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:10:00 - 数据库插入成功 +2025-10-31 13:10:00 - 上传线程结束: /mnt/save/warning/warning_20251031_130958.jpg: 成功! +2025-10-31 13:10:17 - 开始上传图片: /mnt/save/warning/warning_20251031_131016.jpg +2025-10-31 13:10:17 - 开始上传图片: /mnt/save/warning/warning_20251031_131015.jpg +2025-10-31 13:10:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:10:18 - 数据库插入成功 +2025-10-31 13:10:18 - 上传线程结束: /mnt/save/warning/warning_20251031_131016.jpg: 成功! +2025-10-31 13:10:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:10:19 - 数据库插入成功 +2025-10-31 13:10:19 - 上传线程结束: /mnt/save/warning/warning_20251031_131015.jpg: 成功! +2025-10-31 13:11:35 - 开始上传图片: /mnt/save/warning/warning_20251031_131134.jpg +2025-10-31 13:11:36 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:11:36 - 数据库插入成功 +2025-10-31 13:11:36 - 上传线程结束: /mnt/save/warning/warning_20251031_131134.jpg: 成功! +2025-10-31 13:11:37 - 开始上传图片: /mnt/save/warning/warning_20251031_131135.jpg +2025-10-31 13:11:38 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:11:38 - 数据库插入成功 +2025-10-31 13:11:38 - 上传线程结束: /mnt/save/warning/warning_20251031_131135.jpg: 成功! +2025-10-31 13:12:53 - 开始上传图片: /mnt/save/warning/warning_20251031_131251.jpg +2025-10-31 13:12:54 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:12:55 - 数据库插入成功 +2025-10-31 13:12:55 - 上传线程结束: /mnt/save/warning/warning_20251031_131251.jpg: 成功! +2025-10-31 13:12:55 - 开始上传图片: /mnt/save/warning/warning_20251031_131255.jpg +2025-10-31 13:12:56 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:12:57 - 数据库插入成功 +2025-10-31 13:12:57 - 上传线程结束: /mnt/save/warning/warning_20251031_131255.jpg: 成功! +2025-10-31 13:12:57 - 开始上传图片: /mnt/save/warning/warning_20251031_131256.jpg +2025-10-31 13:12:58 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:12:59 - 数据库插入成功 +2025-10-31 13:12:59 - 上传线程结束: /mnt/save/warning/warning_20251031_131256.jpg: 成功! +2025-10-31 13:12:59 - 开始上传图片: /mnt/save/warning/warning_20251031_131259.jpg +2025-10-31 13:13:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:13:00 - 数据库插入成功 +2025-10-31 13:13:00 - 上传线程结束: /mnt/save/warning/warning_20251031_131259.jpg: 成功! +2025-10-31 13:13:01 - 开始上传图片: /mnt/save/warning/warning_20251031_131300.jpg +2025-10-31 13:13:02 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:13:03 - 数据库插入成功 +2025-10-31 13:13:03 - 上传线程结束: /mnt/save/warning/warning_20251031_131300.jpg: 成功! +2025-10-31 13:13:11 - 开始上传图片: /mnt/save/warning/warning_20251031_131309.jpg +2025-10-31 13:13:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:13:13 - 数据库插入成功 +2025-10-31 13:13:13 - 上传线程结束: /mnt/save/warning/warning_20251031_131309.jpg: 成功! +2025-10-31 13:13:41 - 开始上传图片: /mnt/save/warning/warning_20251031_131339.jpg +2025-10-31 13:13:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:13:43 - 数据库插入成功 +2025-10-31 13:13:43 - 上传线程结束: /mnt/save/warning/warning_20251031_131339.jpg: 成功! +2025-10-31 13:13:47 - 开始上传图片: /mnt/save/warning/warning_20251031_131346.jpg +2025-10-31 13:13:48 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:13:49 - 数据库插入成功 +2025-10-31 13:13:49 - 上传线程结束: /mnt/save/warning/warning_20251031_131346.jpg: 成功! +2025-10-31 13:13:51 - 开始上传图片: /mnt/save/warning/warning_20251031_131351.jpg +2025-10-31 13:13:52 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:13:53 - 数据库插入成功 +2025-10-31 13:13:53 - 上传线程结束: /mnt/save/warning/warning_20251031_131351.jpg: 成功! +2025-10-31 13:13:57 - 开始上传图片: /mnt/save/warning/warning_20251031_131357.jpg +2025-10-31 13:13:58 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:13:59 - 数据库插入成功 +2025-10-31 13:13:59 - 上传线程结束: /mnt/save/warning/warning_20251031_131357.jpg: 成功! +2025-10-31 13:13:59 - 开始上传图片: /mnt/save/warning/warning_20251031_131358.jpg +2025-10-31 13:14:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:01 - 数据库插入成功 +2025-10-31 13:14:01 - 上传线程结束: /mnt/save/warning/warning_20251031_131358.jpg: 成功! +2025-10-31 13:14:01 - 开始上传图片: /mnt/save/warning/warning_20251031_131400.jpg +2025-10-31 13:14:02 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:03 - 数据库插入成功 +2025-10-31 13:14:03 - 上传线程结束: /mnt/save/warning/warning_20251031_131400.jpg: 成功! +2025-10-31 13:14:11 - 开始上传图片: /mnt/save/warning/warning_20251031_131411.jpg +2025-10-31 13:14:11 - 开始上传图片: /mnt/save/warning/warning_20251031_131410.jpg +2025-10-31 13:14:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:13 - 数据库插入成功 +2025-10-31 13:14:13 - 上传线程结束: /mnt/save/warning/warning_20251031_131410.jpg: 成功! +2025-10-31 13:14:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:14 - 数据库插入成功 +2025-10-31 13:14:14 - 上传线程结束: /mnt/save/warning/warning_20251031_131411.jpg: 成功! +2025-10-31 13:14:15 - 开始上传图片: /mnt/save/warning/warning_20251031_131415.jpg +2025-10-31 13:14:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:17 - 数据库插入成功 +2025-10-31 13:14:17 - 上传线程结束: /mnt/save/warning/warning_20251031_131415.jpg: 成功! +2025-10-31 13:14:21 - 开始上传图片: /mnt/save/warning/warning_20251031_131421.jpg +2025-10-31 13:14:22 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:23 - 数据库插入成功 +2025-10-31 13:14:23 - 上传线程结束: /mnt/save/warning/warning_20251031_131421.jpg: 成功! +2025-10-31 13:14:23 - 开始上传图片: /mnt/save/warning/warning_20251031_131422.jpg +2025-10-31 13:14:24 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:25 - 数据库插入成功 +2025-10-31 13:14:25 - 上传线程结束: /mnt/save/warning/warning_20251031_131422.jpg: 成功! +2025-10-31 13:14:27 - 开始上传图片: /mnt/save/warning/warning_20251031_131427.jpg +2025-10-31 13:14:27 - 开始上传图片: /mnt/save/warning/warning_20251031_131426.jpg +2025-10-31 13:14:29 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:29 - 数据库插入成功 +2025-10-31 13:14:29 - 上传线程结束: /mnt/save/warning/warning_20251031_131427.jpg: 成功! +2025-10-31 13:14:29 - 开始上传图片: /mnt/save/warning/warning_20251031_131428.jpg +2025-10-31 13:14:29 - 开始上传图片: /mnt/save/warning/warning_20251031_131429.jpg +2025-10-31 13:14:30 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:30 - 数据库插入成功 +2025-10-31 13:14:30 - 上传线程结束: /mnt/save/warning/warning_20251031_131426.jpg: 成功! +2025-10-31 13:14:31 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:31 - 数据库插入成功 +2025-10-31 13:14:31 - 上传线程结束: /mnt/save/warning/warning_20251031_131428.jpg: 成功! +2025-10-31 13:14:32 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:32 - 数据库插入成功 +2025-10-31 13:14:32 - 上传线程结束: /mnt/save/warning/warning_20251031_131429.jpg: 成功! +2025-10-31 13:14:34 - 开始上传图片: /mnt/save/warning/warning_20251031_131432.jpg +2025-10-31 13:14:34 - 开始上传图片: /mnt/save/warning/warning_20251031_131433.jpg +2025-10-31 13:14:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:35 - 数据库插入成功 +2025-10-31 13:14:35 - 上传线程结束: /mnt/save/warning/warning_20251031_131432.jpg: 成功! +2025-10-31 13:14:36 - 开始上传图片: /mnt/save/warning/warning_20251031_131435.jpg +2025-10-31 13:14:36 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:36 - 数据库插入成功 +2025-10-31 13:14:36 - 上传线程结束: /mnt/save/warning/warning_20251031_131433.jpg: 成功! +2025-10-31 13:14:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:37 - 数据库插入成功 +2025-10-31 13:14:37 - 上传线程结束: /mnt/save/warning/warning_20251031_131435.jpg: 成功! +2025-10-31 13:14:38 - 开始上传图片: /mnt/save/warning/warning_20251031_131436.jpg +2025-10-31 13:14:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:39 - 数据库插入成功 +2025-10-31 13:14:39 - 上传线程结束: /mnt/save/warning/warning_20251031_131436.jpg: 成功! +2025-10-31 13:14:40 - 开始上传图片: /mnt/save/warning/warning_20251031_131438.jpg +2025-10-31 13:14:40 - 开始上传图片: /mnt/save/warning/warning_20251031_131439.jpg +2025-10-31 13:14:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:41 - 数据库插入成功 +2025-10-31 13:14:41 - 上传线程结束: /mnt/save/warning/warning_20251031_131438.jpg: 成功! +2025-10-31 13:14:42 - 开始上传图片: /mnt/save/warning/warning_20251031_131441.jpg +2025-10-31 13:14:42 - 开始上传图片: /mnt/save/warning/warning_20251031_131440.jpg +2025-10-31 13:14:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:42 - 数据库插入成功 +2025-10-31 13:14:42 - 上传线程结束: /mnt/save/warning/warning_20251031_131439.jpg: 成功! +2025-10-31 13:14:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:43 - 数据库插入成功 +2025-10-31 13:14:43 - 上传线程结束: /mnt/save/warning/warning_20251031_131440.jpg: 成功! +2025-10-31 13:14:44 - 开始上传图片: /mnt/save/warning/warning_20251031_131442.jpg +2025-10-31 13:14:44 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:44 - 数据库插入成功 +2025-10-31 13:14:44 - 上传线程结束: /mnt/save/warning/warning_20251031_131441.jpg: 成功! +2025-10-31 13:14:45 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:45 - 数据库插入成功 +2025-10-31 13:14:45 - 上传线程结束: /mnt/save/warning/warning_20251031_131442.jpg: 成功! +2025-10-31 13:14:50 - 开始上传图片: /mnt/save/warning/warning_20251031_131448.jpg +2025-10-31 13:14:51 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:51 - 数据库插入成功 +2025-10-31 13:14:51 - 上传线程结束: /mnt/save/warning/warning_20251031_131448.jpg: 成功! +2025-10-31 13:14:52 - 开始上传图片: /mnt/save/warning/warning_20251031_131451.jpg +2025-10-31 13:14:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:53 - 数据库插入成功 +2025-10-31 13:14:53 - 上传线程结束: /mnt/save/warning/warning_20251031_131451.jpg: 成功! +2025-10-31 13:14:56 - 开始上传图片: /mnt/save/warning/warning_20251031_131454.jpg +2025-10-31 13:14:57 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:57 - 数据库插入成功 +2025-10-31 13:14:57 - 上传线程结束: /mnt/save/warning/warning_20251031_131454.jpg: 成功! +2025-10-31 13:14:58 - 开始上传图片: /mnt/save/warning/warning_20251031_131457.jpg +2025-10-31 13:14:58 - 开始上传图片: /mnt/save/warning/warning_20251031_131456.jpg +2025-10-31 13:14:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:14:59 - 数据库插入成功 +2025-10-31 13:14:59 - 上传线程结束: /mnt/save/warning/warning_20251031_131457.jpg: 成功! +2025-10-31 13:15:00 - 开始上传图片: /mnt/save/warning/warning_20251031_131459.jpg +2025-10-31 13:15:00 - 开始上传图片: /mnt/save/warning/warning_20251031_131458.jpg +2025-10-31 13:15:00 - 开始上传图片: /mnt/save/warning/warning_20251031_131500.jpg +2025-10-31 13:15:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:00 - 数据库插入成功 +2025-10-31 13:15:00 - 上传线程结束: /mnt/save/warning/warning_20251031_131456.jpg: 成功! +2025-10-31 13:15:01 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:01 - 数据库插入成功 +2025-10-31 13:15:01 - 上传线程结束: /mnt/save/warning/warning_20251031_131458.jpg: 成功! +2025-10-31 13:15:02 - 开始上传图片: /mnt/save/warning/warning_20251031_131501.jpg +2025-10-31 13:15:02 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:02 - 数据库插入成功 +2025-10-31 13:15:02 - 上传线程结束: /mnt/save/warning/warning_20251031_131459.jpg: 成功! +2025-10-31 13:15:03 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:03 - 数据库插入成功 +2025-10-31 13:15:03 - 上传线程结束: /mnt/save/warning/warning_20251031_131500.jpg: 成功! +2025-10-31 13:15:04 - 开始上传图片: /mnt/save/warning/warning_20251031_131502.jpg +2025-10-31 13:15:04 - 开始上传图片: /mnt/save/warning/warning_20251031_131503.jpg +2025-10-31 13:15:04 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:04 - 数据库插入成功 +2025-10-31 13:15:04 - 上传线程结束: /mnt/save/warning/warning_20251031_131501.jpg: 成功! +2025-10-31 13:15:05 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:05 - 数据库插入成功 +2025-10-31 13:15:05 - 上传线程结束: /mnt/save/warning/warning_20251031_131502.jpg: 成功! +2025-10-31 13:15:06 - 开始上传图片: /mnt/save/warning/warning_20251031_131504.jpg +2025-10-31 13:15:06 - 开始上传图片: /mnt/save/warning/warning_20251031_131505.jpg +2025-10-31 13:15:06 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:06 - 数据库插入成功 +2025-10-31 13:15:06 - 上传线程结束: /mnt/save/warning/warning_20251031_131503.jpg: 成功! +2025-10-31 13:15:07 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:07 - 数据库插入成功 +2025-10-31 13:15:07 - 上传线程结束: /mnt/save/warning/warning_20251031_131504.jpg: 成功! +2025-10-31 13:15:08 - 开始上传图片: /mnt/save/warning/warning_20251031_131506.jpg +2025-10-31 13:15:08 - 开始上传图片: /mnt/save/warning/warning_20251031_131507.jpg +2025-10-31 13:15:08 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:08 - 数据库插入成功 +2025-10-31 13:15:08 - 上传线程结束: /mnt/save/warning/warning_20251031_131505.jpg: 成功! +2025-10-31 13:15:09 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:09 - 数据库插入成功 +2025-10-31 13:15:09 - 上传线程结束: /mnt/save/warning/warning_20251031_131506.jpg: 成功! +2025-10-31 13:15:10 - 开始上传图片: /mnt/save/warning/warning_20251031_131508.jpg +2025-10-31 13:15:10 - 开始上传图片: /mnt/save/warning/warning_20251031_131510.jpg +2025-10-31 13:15:10 - 开始上传图片: /mnt/save/warning/warning_20251031_131509.jpg +2025-10-31 13:15:10 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:10 - 数据库插入成功 +2025-10-31 13:15:10 - 上传线程结束: /mnt/save/warning/warning_20251031_131507.jpg: 成功! +2025-10-31 13:15:11 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:11 - 数据库插入成功 +2025-10-31 13:15:11 - 上传线程结束: /mnt/save/warning/warning_20251031_131508.jpg: 成功! +2025-10-31 13:15:12 - 开始上传图片: /mnt/save/warning/warning_20251031_131511.jpg +2025-10-31 13:15:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:12 - 数据库插入成功 +2025-10-31 13:15:12 - 上传线程结束: /mnt/save/warning/warning_20251031_131510.jpg: 成功! +2025-10-31 13:15:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:13 - 数据库插入成功 +2025-10-31 13:15:13 - 上传线程结束: /mnt/save/warning/warning_20251031_131509.jpg: 成功! +2025-10-31 13:15:14 - 开始上传图片: /mnt/save/warning/warning_20251031_131513.jpg +2025-10-31 13:15:14 - 开始上传图片: /mnt/save/warning/warning_20251031_131512.jpg +2025-10-31 13:15:14 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:14 - 数据库插入成功 +2025-10-31 13:15:14 - 上传线程结束: /mnt/save/warning/warning_20251031_131511.jpg: 成功! +2025-10-31 13:15:15 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:15 - 数据库插入成功 +2025-10-31 13:15:15 - 上传线程结束: /mnt/save/warning/warning_20251031_131513.jpg: 成功! +2025-10-31 13:15:16 - 开始上传图片: /mnt/save/warning/warning_20251031_131515.jpg +2025-10-31 13:15:16 - 开始上传图片: /mnt/save/warning/warning_20251031_131516.jpg +2025-10-31 13:15:16 - 开始上传图片: /mnt/save/warning/warning_20251031_131514.jpg +2025-10-31 13:15:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:16 - 数据库插入成功 +2025-10-31 13:15:16 - 上传线程结束: /mnt/save/warning/warning_20251031_131512.jpg: 成功! +2025-10-31 13:15:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:17 - 数据库插入成功 +2025-10-31 13:15:17 - 上传线程结束: /mnt/save/warning/warning_20251031_131515.jpg: 成功! +2025-10-31 13:15:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:18 - 数据库插入成功 +2025-10-31 13:15:18 - 上传线程结束: /mnt/save/warning/warning_20251031_131516.jpg: 成功! +2025-10-31 13:15:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:19 - 数据库插入成功 +2025-10-31 13:15:19 - 上传线程结束: /mnt/save/warning/warning_20251031_131514.jpg: 成功! +2025-10-31 13:15:20 - 开始上传图片: /mnt/save/warning/warning_20251031_131519.jpg +2025-10-31 13:15:21 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:21 - 数据库插入成功 +2025-10-31 13:15:21 - 上传线程结束: /mnt/save/warning/warning_20251031_131519.jpg: 成功! +2025-10-31 13:15:22 - 开始上传图片: /mnt/save/warning/warning_20251031_131520.jpg +2025-10-31 13:15:23 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:23 - 数据库插入成功 +2025-10-31 13:15:23 - 上传线程结束: /mnt/save/warning/warning_20251031_131520.jpg: 成功! +2025-10-31 13:15:34 - 开始上传图片: /mnt/save/warning/warning_20251031_131533.jpg +2025-10-31 13:15:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:35 - 数据库插入成功 +2025-10-31 13:15:35 - 上传线程结束: /mnt/save/warning/warning_20251031_131533.jpg: 成功! +2025-10-31 13:15:36 - 开始上传图片: /mnt/save/warning/warning_20251031_131535.jpg +2025-10-31 13:15:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:37 - 数据库插入成功 +2025-10-31 13:15:37 - 上传线程结束: /mnt/save/warning/warning_20251031_131535.jpg: 成功! +2025-10-31 13:15:38 - 开始上传图片: /mnt/save/warning/warning_20251031_131537.jpg +2025-10-31 13:15:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:39 - 数据库插入成功 +2025-10-31 13:15:39 - 上传线程结束: /mnt/save/warning/warning_20251031_131537.jpg: 成功! +2025-10-31 13:15:40 - 开始上传图片: /mnt/save/warning/warning_20251031_131539.jpg +2025-10-31 13:15:40 - 开始上传图片: /mnt/save/warning/warning_20251031_131538.jpg +2025-10-31 13:15:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:41 - 数据库插入成功 +2025-10-31 13:15:41 - 上传线程结束: /mnt/save/warning/warning_20251031_131538.jpg: 成功! +2025-10-31 13:15:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:15:42 - 数据库插入成功 +2025-10-31 13:15:42 - 上传线程结束: /mnt/save/warning/warning_20251031_131539.jpg: 成功! +2025-10-31 13:16:38 - 开始上传图片: /mnt/save/warning/warning_20251031_131638.jpg +2025-10-31 13:16:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:16:40 - 数据库插入成功 +2025-10-31 13:16:40 - 上传线程结束: /mnt/save/warning/warning_20251031_131638.jpg: 成功! +2025-10-31 13:16:40 - 开始上传图片: /mnt/save/warning/warning_20251031_131639.jpg +2025-10-31 13:16:40 - 开始上传图片: /mnt/save/warning/warning_20251031_131640.jpg +2025-10-31 13:16:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:16:42 - 数据库插入成功 +2025-10-31 13:16:42 - 上传线程结束: /mnt/save/warning/warning_20251031_131639.jpg: 成功! +2025-10-31 13:16:42 - 开始上传图片: /mnt/save/warning/warning_20251031_131641.jpg +2025-10-31 13:16:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:16:43 - 数据库插入成功 +2025-10-31 13:16:43 - 上传线程结束: /mnt/save/warning/warning_20251031_131640.jpg: 成功! +2025-10-31 13:16:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:16:44 - 数据库插入成功 +2025-10-31 13:16:44 - 上传线程结束: /mnt/save/warning/warning_20251031_131641.jpg: 成功! +2025-10-31 13:17:45 - 开始上传图片: /mnt/save/warning/warning_20251031_131743.jpg +2025-10-31 13:17:46 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:17:46 - 数据库插入成功 +2025-10-31 13:17:46 - 上传线程结束: /mnt/save/warning/warning_20251031_131743.jpg: 成功! +2025-10-31 13:17:47 - 开始上传图片: /mnt/save/warning/warning_20251031_131745.jpg +2025-10-31 13:17:48 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:17:48 - 数据库插入成功 +2025-10-31 13:17:48 - 上传线程结束: /mnt/save/warning/warning_20251031_131745.jpg: 成功! +2025-10-31 13:17:49 - 开始上传图片: /mnt/save/warning/warning_20251031_131748.jpg +2025-10-31 13:17:50 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:17:50 - 数据库插入成功 +2025-10-31 13:17:50 - 上传线程结束: /mnt/save/warning/warning_20251031_131748.jpg: 成功! +2025-10-31 13:17:51 - 开始上传图片: /mnt/save/warning/warning_20251031_131750.jpg +2025-10-31 13:17:51 - 开始上传图片: /mnt/save/warning/warning_20251031_131749.jpg +2025-10-31 13:17:52 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:17:52 - 数据库插入成功 +2025-10-31 13:17:52 - 上传线程结束: /mnt/save/warning/warning_20251031_131749.jpg: 成功! +2025-10-31 13:17:53 - 开始上传图片: /mnt/save/warning/warning_20251031_131751.jpg +2025-10-31 13:17:53 - 开始上传图片: /mnt/save/warning/warning_20251031_131752.jpg +2025-10-31 13:17:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:17:53 - 数据库插入成功 +2025-10-31 13:17:53 - 上传线程结束: /mnt/save/warning/warning_20251031_131750.jpg: 成功! +2025-10-31 13:17:54 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:17:54 - 数据库插入成功 +2025-10-31 13:17:54 - 上传线程结束: /mnt/save/warning/warning_20251031_131751.jpg: 成功! +2025-10-31 13:17:55 - 开始上传图片: /mnt/save/warning/warning_20251031_131753.jpg +2025-10-31 13:17:55 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:17:55 - 数据库插入成功 +2025-10-31 13:17:55 - 上传线程结束: /mnt/save/warning/warning_20251031_131752.jpg: 成功! +2025-10-31 13:17:56 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:17:56 - 数据库插入成功 +2025-10-31 13:17:56 - 上传线程结束: /mnt/save/warning/warning_20251031_131753.jpg: 成功! +2025-10-31 13:17:57 - 开始上传图片: /mnt/save/warning/warning_20251031_131756.jpg +2025-10-31 13:17:57 - 开始上传图片: /mnt/save/warning/warning_20251031_131755.jpg +2025-10-31 13:17:58 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:17:58 - 数据库插入成功 +2025-10-31 13:17:58 - 上传线程结束: /mnt/save/warning/warning_20251031_131756.jpg: 成功! +2025-10-31 13:17:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:17:59 - 数据库插入成功 +2025-10-31 13:17:59 - 上传线程结束: /mnt/save/warning/warning_20251031_131755.jpg: 成功! +2025-10-31 13:18:07 - 开始上传图片: /mnt/save/warning/warning_20251031_131806.jpg +2025-10-31 13:18:08 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:08 - 数据库插入成功 +2025-10-31 13:18:08 - 上传线程结束: /mnt/save/warning/warning_20251031_131806.jpg: 成功! +2025-10-31 13:18:09 - 开始上传图片: /mnt/save/warning/warning_20251031_131807.jpg +2025-10-31 13:18:09 - 开始上传图片: /mnt/save/warning/warning_20251031_131808.jpg +2025-10-31 13:18:10 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:10 - 数据库插入成功 +2025-10-31 13:18:10 - 上传线程结束: /mnt/save/warning/warning_20251031_131807.jpg: 成功! +2025-10-31 13:18:11 - 开始上传图片: /mnt/save/warning/warning_20251031_131809.jpg +2025-10-31 13:18:11 - 开始上传图片: /mnt/save/warning/warning_20251031_131810.jpg +2025-10-31 13:18:11 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:11 - 数据库插入成功 +2025-10-31 13:18:11 - 上传线程结束: /mnt/save/warning/warning_20251031_131808.jpg: 成功! +2025-10-31 13:18:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:12 - 数据库插入成功 +2025-10-31 13:18:12 - 上传线程结束: /mnt/save/warning/warning_20251031_131810.jpg: 成功! +2025-10-31 13:18:13 - 开始上传图片: /mnt/save/warning/warning_20251031_131811.jpg +2025-10-31 13:18:13 - 开始上传图片: /mnt/save/warning/warning_20251031_131812.jpg +2025-10-31 13:18:13 - 开始上传图片: /mnt/save/warning/warning_20251031_131813.jpg +2025-10-31 13:18:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:13 - 数据库插入成功 +2025-10-31 13:18:13 - 上传线程结束: /mnt/save/warning/warning_20251031_131809.jpg: 成功! +2025-10-31 13:18:14 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:14 - 数据库插入成功 +2025-10-31 13:18:14 - 上传线程结束: /mnt/save/warning/warning_20251031_131811.jpg: 成功! +2025-10-31 13:18:15 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:15 - 数据库插入成功 +2025-10-31 13:18:15 - 上传线程结束: /mnt/save/warning/warning_20251031_131812.jpg: 成功! +2025-10-31 13:18:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:16 - 数据库插入成功 +2025-10-31 13:18:16 - 上传线程结束: /mnt/save/warning/warning_20251031_131813.jpg: 成功! +2025-10-31 13:18:17 - 开始上传图片: /mnt/save/warning/warning_20251031_131816.jpg +2025-10-31 13:18:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:18 - 数据库插入成功 +2025-10-31 13:18:18 - 上传线程结束: /mnt/save/warning/warning_20251031_131816.jpg: 成功! +2025-10-31 13:18:19 - 开始上传图片: /mnt/save/warning/warning_20251031_131817.jpg +2025-10-31 13:18:20 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:20 - 数据库插入成功 +2025-10-31 13:18:20 - 上传线程结束: /mnt/save/warning/warning_20251031_131817.jpg: 成功! +2025-10-31 13:18:21 - 开始上传图片: /mnt/save/warning/warning_20251031_131820.jpg +2025-10-31 13:18:22 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:22 - 数据库插入成功 +2025-10-31 13:18:22 - 上传线程结束: /mnt/save/warning/warning_20251031_131820.jpg: 成功! +2025-10-31 13:18:23 - 开始上传图片: /mnt/save/warning/warning_20251031_131823.jpg +2025-10-31 13:18:24 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:24 - 数据库插入成功 +2025-10-31 13:18:24 - 上传线程结束: /mnt/save/warning/warning_20251031_131823.jpg: 成功! +2025-10-31 13:18:31 - 开始上传图片: /mnt/save/warning/warning_20251031_131831.jpg +2025-10-31 13:18:32 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:32 - 数据库插入成功 +2025-10-31 13:18:32 - 上传线程结束: /mnt/save/warning/warning_20251031_131831.jpg: 成功! +2025-10-31 13:18:33 - 开始上传图片: /mnt/save/warning/warning_20251031_131832.jpg +2025-10-31 13:18:33 - 开始上传图片: /mnt/save/warning/warning_20251031_131833.jpg +2025-10-31 13:18:34 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:34 - 数据库插入成功 +2025-10-31 13:18:34 - 上传线程结束: /mnt/save/warning/warning_20251031_131832.jpg: 成功! +2025-10-31 13:18:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:35 - 数据库插入成功 +2025-10-31 13:18:35 - 上传线程结束: /mnt/save/warning/warning_20251031_131833.jpg: 成功! +2025-10-31 13:18:39 - 开始上传图片: /mnt/save/warning/warning_20251031_131838.jpg +2025-10-31 13:18:40 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:40 - 数据库插入成功 +2025-10-31 13:18:40 - 上传线程结束: /mnt/save/warning/warning_20251031_131838.jpg: 成功! +2025-10-31 13:18:41 - 开始上传图片: /mnt/save/warning/warning_20251031_131839.jpg +2025-10-31 13:18:41 - 开始上传图片: /mnt/save/warning/warning_20251031_131840.jpg +2025-10-31 13:18:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:42 - 数据库插入成功 +2025-10-31 13:18:42 - 上传线程结束: /mnt/save/warning/warning_20251031_131839.jpg: 成功! +2025-10-31 13:18:43 - 开始上传图片: /mnt/save/warning/warning_20251031_131843.jpg +2025-10-31 13:18:43 - 开始上传图片: /mnt/save/warning/warning_20251031_131842.jpg +2025-10-31 13:18:43 - 开始上传图片: /mnt/save/warning/warning_20251031_131841.jpg +2025-10-31 13:18:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:43 - 数据库插入成功 +2025-10-31 13:18:43 - 上传线程结束: /mnt/save/warning/warning_20251031_131840.jpg: 成功! +2025-10-31 13:18:44 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:44 - 数据库插入成功 +2025-10-31 13:18:44 - 上传线程结束: /mnt/save/warning/warning_20251031_131843.jpg: 成功! +2025-10-31 13:18:45 - 开始上传图片: /mnt/save/warning/warning_20251031_131844.jpg +2025-10-31 13:18:45 - 开始上传图片: /mnt/save/warning/warning_20251031_131845.jpg +2025-10-31 13:18:45 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:45 - 数据库插入成功 +2025-10-31 13:18:45 - 上传线程结束: /mnt/save/warning/warning_20251031_131842.jpg: 成功! +2025-10-31 13:18:46 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:46 - 数据库插入成功 +2025-10-31 13:18:46 - 上传线程结束: /mnt/save/warning/warning_20251031_131841.jpg: 成功! +2025-10-31 13:18:47 - 开始上传图片: /mnt/save/warning/warning_20251031_131847.jpg +2025-10-31 13:18:47 - 开始上传图片: /mnt/save/warning/warning_20251031_131846.jpg +2025-10-31 13:18:47 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:47 - 数据库插入成功 +2025-10-31 13:18:47 - 上传线程结束: /mnt/save/warning/warning_20251031_131845.jpg: 成功! +2025-10-31 13:18:48 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:48 - 数据库插入成功 +2025-10-31 13:18:48 - 上传线程结束: /mnt/save/warning/warning_20251031_131844.jpg: 成功! +2025-10-31 13:18:49 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:49 - 开始上传图片: /mnt/save/warning/warning_20251031_131848.jpg +2025-10-31 13:18:49 - 数据库插入成功 +2025-10-31 13:18:49 - 上传线程结束: /mnt/save/warning/warning_20251031_131846.jpg: 成功! +2025-10-31 13:18:50 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:50 - 数据库插入成功 +2025-10-31 13:18:50 - 上传线程结束: /mnt/save/warning/warning_20251031_131847.jpg: 成功! +2025-10-31 13:18:51 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:51 - 开始上传图片: /mnt/save/warning/warning_20251031_131851.jpg +2025-10-31 13:18:51 - 开始上传图片: /mnt/save/warning/warning_20251031_131849.jpg +2025-10-31 13:18:51 - 开始上传图片: /mnt/save/warning/warning_20251031_131850.jpg +2025-10-31 13:18:51 - 数据库插入成功 +2025-10-31 13:18:51 - 上传线程结束: /mnt/save/warning/warning_20251031_131848.jpg: 成功! +2025-10-31 13:18:52 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:52 - 数据库插入成功 +2025-10-31 13:18:52 - 上传线程结束: /mnt/save/warning/warning_20251031_131850.jpg: 成功! +2025-10-31 13:18:53 - 开始上传图片: /mnt/save/warning/warning_20251031_131852.jpg +2025-10-31 13:18:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:53 - 数据库插入成功 +2025-10-31 13:18:53 - 上传线程结束: /mnt/save/warning/warning_20251031_131851.jpg: 成功! +2025-10-31 13:18:54 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:54 - 数据库插入成功 +2025-10-31 13:18:54 - 上传线程结束: /mnt/save/warning/warning_20251031_131849.jpg: 成功! +2025-10-31 13:18:55 - 开始上传图片: /mnt/save/warning/warning_20251031_131855.jpg +2025-10-31 13:18:55 - 开始上传图片: /mnt/save/warning/warning_20251031_131854.jpg +2025-10-31 13:18:55 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:55 - 数据库插入成功 +2025-10-31 13:18:55 - 上传线程结束: /mnt/save/warning/warning_20251031_131852.jpg: 成功! +2025-10-31 13:18:56 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:56 - 数据库插入成功 +2025-10-31 13:18:56 - 上传线程结束: /mnt/save/warning/warning_20251031_131854.jpg: 成功! +2025-10-31 13:18:57 - 开始上传图片: /mnt/save/warning/warning_20251031_131856.jpg +2025-10-31 13:18:57 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:57 - 数据库插入成功 +2025-10-31 13:18:57 - 上传线程结束: /mnt/save/warning/warning_20251031_131855.jpg: 成功! +2025-10-31 13:18:58 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:18:58 - 数据库插入成功 +2025-10-31 13:18:58 - 上传线程结束: /mnt/save/warning/warning_20251031_131856.jpg: 成功! +2025-10-31 13:19:05 - 开始上传图片: /mnt/save/warning/warning_20251031_131903.jpg +2025-10-31 13:19:05 - 开始上传图片: /mnt/save/warning/warning_20251031_131905.jpg +2025-10-31 13:19:06 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:07 - 数据库插入成功 +2025-10-31 13:19:07 - 上传线程结束: /mnt/save/warning/warning_20251031_131903.jpg: 成功! +2025-10-31 13:19:07 - 开始上传图片: /mnt/save/warning/warning_20251031_131906.jpg +2025-10-31 13:19:07 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:08 - 数据库插入成功 +2025-10-31 13:19:08 - 上传线程结束: /mnt/save/warning/warning_20251031_131905.jpg: 成功! +2025-10-31 13:19:08 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:09 - 数据库插入成功 +2025-10-31 13:19:09 - 上传线程结束: /mnt/save/warning/warning_20251031_131906.jpg: 成功! +2025-10-31 13:19:09 - 开始上传图片: /mnt/save/warning/warning_20251031_131907.jpg +2025-10-31 13:19:09 - 开始上传图片: /mnt/save/warning/warning_20251031_131908.jpg +2025-10-31 13:19:09 - 开始上传图片: /mnt/save/warning/warning_20251031_131909.jpg +2025-10-31 13:19:10 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:11 - 数据库插入成功 +2025-10-31 13:19:11 - 上传线程结束: /mnt/save/warning/warning_20251031_131908.jpg: 成功! +2025-10-31 13:19:11 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:12 - 数据库插入成功 +2025-10-31 13:19:12 - 上传线程结束: /mnt/save/warning/warning_20251031_131907.jpg: 成功! +2025-10-31 13:19:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:13 - 数据库插入成功 +2025-10-31 13:19:13 - 上传线程结束: /mnt/save/warning/warning_20251031_131909.jpg: 成功! +2025-10-31 13:19:13 - 开始上传图片: /mnt/save/warning/warning_20251031_131913.jpg +2025-10-31 13:19:14 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:15 - 数据库插入成功 +2025-10-31 13:19:15 - 上传线程结束: /mnt/save/warning/warning_20251031_131913.jpg: 成功! +2025-10-31 13:19:15 - 开始上传图片: /mnt/save/warning/warning_20251031_131914.jpg +2025-10-31 13:19:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:17 - 数据库插入成功 +2025-10-31 13:19:17 - 上传线程结束: /mnt/save/warning/warning_20251031_131914.jpg: 成功! +2025-10-31 13:19:17 - 开始上传图片: /mnt/save/warning/warning_20251031_131917.jpg +2025-10-31 13:19:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:19 - 数据库插入成功 +2025-10-31 13:19:19 - 上传线程结束: /mnt/save/warning/warning_20251031_131917.jpg: 成功! +2025-10-31 13:19:19 - 开始上传图片: /mnt/save/warning/warning_20251031_131919.jpg +2025-10-31 13:19:20 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:21 - 数据库插入成功 +2025-10-31 13:19:21 - 上传线程结束: /mnt/save/warning/warning_20251031_131919.jpg: 成功! +2025-10-31 13:19:23 - 开始上传图片: /mnt/save/warning/warning_20251031_131921.jpg +2025-10-31 13:19:24 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:25 - 数据库插入成功 +2025-10-31 13:19:25 - 上传线程结束: /mnt/save/warning/warning_20251031_131921.jpg: 成功! +2025-10-31 13:19:29 - 开始上传图片: /mnt/save/warning/warning_20251031_131928.jpg +2025-10-31 13:19:29 - 开始上传图片: /mnt/save/warning/warning_20251031_131929.jpg +2025-10-31 13:19:29 - 开始上传图片: /mnt/save/warning/warning_20251031_131927.jpg +2025-10-31 13:19:30 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:31 - 数据库插入成功 +2025-10-31 13:19:31 - 上传线程结束: /mnt/save/warning/warning_20251031_131927.jpg: 成功! +2025-10-31 13:19:31 - 开始上传图片: /mnt/save/warning/warning_20251031_131930.jpg +2025-10-31 13:19:31 - 开始上传图片: /mnt/save/warning/warning_20251031_131931.jpg +2025-10-31 13:19:31 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:32 - 数据库插入成功 +2025-10-31 13:19:32 - 上传线程结束: /mnt/save/warning/warning_20251031_131928.jpg: 成功! +2025-10-31 13:19:32 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:33 - 数据库插入成功 +2025-10-31 13:19:33 - 上传线程结束: /mnt/save/warning/warning_20251031_131929.jpg: 成功! +2025-10-31 13:19:33 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:33 - 开始上传图片: /mnt/save/warning/warning_20251031_131932.jpg +2025-10-31 13:19:34 - 数据库插入成功 +2025-10-31 13:19:34 - 上传线程结束: /mnt/save/warning/warning_20251031_131930.jpg: 成功! +2025-10-31 13:19:34 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:35 - 数据库插入成功 +2025-10-31 13:19:35 - 上传线程结束: /mnt/save/warning/warning_20251031_131931.jpg: 成功! +2025-10-31 13:19:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:35 - 开始上传图片: /mnt/save/warning/warning_20251031_131934.jpg +2025-10-31 13:19:35 - 开始上传图片: /mnt/save/warning/warning_20251031_131933.jpg +2025-10-31 13:19:35 - 开始上传图片: /mnt/save/warning/warning_20251031_131935.jpg +2025-10-31 13:19:36 - 数据库插入成功 +2025-10-31 13:19:36 - 上传线程结束: /mnt/save/warning/warning_20251031_131932.jpg: 成功! +2025-10-31 13:19:36 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:37 - 数据库插入成功 +2025-10-31 13:19:37 - 上传线程结束: /mnt/save/warning/warning_20251031_131934.jpg: 成功! +2025-10-31 13:19:37 - 开始上传图片: /mnt/save/warning/warning_20251031_131936.jpg +2025-10-31 13:19:37 - 开始上传图片: /mnt/save/warning/warning_20251031_131937.jpg +2025-10-31 13:19:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:38 - 数据库插入成功 +2025-10-31 13:19:38 - 上传线程结束: /mnt/save/warning/warning_20251031_131933.jpg: 成功! +2025-10-31 13:19:38 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:39 - 数据库插入成功 +2025-10-31 13:19:39 - 上传线程结束: /mnt/save/warning/warning_20251031_131935.jpg: 成功! +2025-10-31 13:19:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:39 - 开始上传图片: /mnt/save/warning/warning_20251031_131939.jpg +2025-10-31 13:19:40 - 数据库插入成功 +2025-10-31 13:19:40 - 上传线程结束: /mnt/save/warning/warning_20251031_131936.jpg: 成功! +2025-10-31 13:19:40 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:41 - 数据库插入成功 +2025-10-31 13:19:41 - 上传线程结束: /mnt/save/warning/warning_20251031_131937.jpg: 成功! +2025-10-31 13:19:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:41 - 开始上传图片: /mnt/save/warning/warning_20251031_131941.jpg +2025-10-31 13:19:41 - 开始上传图片: /mnt/save/warning/warning_20251031_131940.jpg +2025-10-31 13:19:42 - 数据库插入成功 +2025-10-31 13:19:42 - 上传线程结束: /mnt/save/warning/warning_20251031_131939.jpg: 成功! +2025-10-31 13:19:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:43 - 数据库插入成功 +2025-10-31 13:19:43 - 上传线程结束: /mnt/save/warning/warning_20251031_131941.jpg: 成功! +2025-10-31 13:19:43 - 开始上传图片: /mnt/save/warning/warning_20251031_131943.jpg +2025-10-31 13:19:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:44 - 数据库插入成功 +2025-10-31 13:19:44 - 上传线程结束: /mnt/save/warning/warning_20251031_131940.jpg: 成功! +2025-10-31 13:19:44 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:45 - 数据库插入成功 +2025-10-31 13:19:45 - 上传线程结束: /mnt/save/warning/warning_20251031_131943.jpg: 成功! +2025-10-31 13:19:45 - 开始上传图片: /mnt/save/warning/warning_20251031_131944.jpg +2025-10-31 13:19:45 - 开始上传图片: /mnt/save/warning/warning_20251031_131945.jpg +2025-10-31 13:19:46 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:47 - 数据库插入成功 +2025-10-31 13:19:47 - 上传线程结束: /mnt/save/warning/warning_20251031_131945.jpg: 成功! +2025-10-31 13:19:47 - 开始上传图片: /mnt/save/warning/warning_20251031_131946.jpg +2025-10-31 13:19:47 - 开始上传图片: /mnt/save/warning/warning_20251031_131947.jpg +2025-10-31 13:19:47 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:48 - 数据库插入成功 +2025-10-31 13:19:48 - 上传线程结束: /mnt/save/warning/warning_20251031_131944.jpg: 成功! +2025-10-31 13:19:48 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:49 - 数据库插入成功 +2025-10-31 13:19:49 - 上传线程结束: /mnt/save/warning/warning_20251031_131947.jpg: 成功! +2025-10-31 13:19:49 - 开始上传图片: /mnt/save/warning/warning_20251031_131948.jpg +2025-10-31 13:19:49 - 开始上传图片: /mnt/save/warning/warning_20251031_131949.jpg +2025-10-31 13:19:49 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:50 - 数据库插入成功 +2025-10-31 13:19:50 - 上传线程结束: /mnt/save/warning/warning_20251031_131946.jpg: 成功! +2025-10-31 13:19:50 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:51 - 数据库插入成功 +2025-10-31 13:19:51 - 上传线程结束: /mnt/save/warning/warning_20251031_131948.jpg: 成功! +2025-10-31 13:19:51 - 开始上传图片: /mnt/save/warning/warning_20251031_131950.jpg +2025-10-31 13:19:51 - 开始上传图片: /mnt/save/warning/warning_20251031_131951.jpg +2025-10-31 13:19:51 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:52 - 数据库插入成功 +2025-10-31 13:19:52 - 上传线程结束: /mnt/save/warning/warning_20251031_131949.jpg: 成功! +2025-10-31 13:19:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:53 - 数据库插入成功 +2025-10-31 13:19:53 - 上传线程结束: /mnt/save/warning/warning_20251031_131951.jpg: 成功! +2025-10-31 13:19:53 - 开始上传图片: /mnt/save/warning/warning_20251031_131952.jpg +2025-10-31 13:19:54 - 开始上传图片: /mnt/save/warning/warning_20251031_131953.jpg +2025-10-31 13:19:54 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:54 - 数据库插入成功 +2025-10-31 13:19:54 - 上传线程结束: /mnt/save/warning/warning_20251031_131950.jpg: 成功! +2025-10-31 13:19:55 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:55 - 数据库插入成功 +2025-10-31 13:19:55 - 上传线程结束: /mnt/save/warning/warning_20251031_131952.jpg: 成功! +2025-10-31 13:19:56 - 开始上传图片: /mnt/save/warning/warning_20251031_131955.jpg +2025-10-31 13:19:56 - 开始上传图片: /mnt/save/warning/warning_20251031_131954.jpg +2025-10-31 13:19:56 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:56 - 数据库插入成功 +2025-10-31 13:19:56 - 上传线程结束: /mnt/save/warning/warning_20251031_131953.jpg: 成功! +2025-10-31 13:19:57 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:57 - 数据库插入成功 +2025-10-31 13:19:57 - 上传线程结束: /mnt/save/warning/warning_20251031_131954.jpg: 成功! +2025-10-31 13:19:58 - 开始上传图片: /mnt/save/warning/warning_20251031_131956.jpg +2025-10-31 13:19:58 - 开始上传图片: /mnt/save/warning/warning_20251031_131957.jpg +2025-10-31 13:19:58 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:58 - 数据库插入成功 +2025-10-31 13:19:58 - 上传线程结束: /mnt/save/warning/warning_20251031_131955.jpg: 成功! +2025-10-31 13:19:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:19:59 - 数据库插入成功 +2025-10-31 13:19:59 - 上传线程结束: /mnt/save/warning/warning_20251031_131956.jpg: 成功! +2025-10-31 13:20:00 - 开始上传图片: /mnt/save/warning/warning_20251031_131958.jpg +2025-10-31 13:20:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:00 - 数据库插入成功 +2025-10-31 13:20:00 - 上传线程结束: /mnt/save/warning/warning_20251031_131957.jpg: 成功! +2025-10-31 13:20:01 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:01 - 数据库插入成功 +2025-10-31 13:20:01 - 上传线程结束: /mnt/save/warning/warning_20251031_131958.jpg: 成功! +2025-10-31 13:20:04 - 开始上传图片: /mnt/save/warning/warning_20251031_132003.jpg +2025-10-31 13:20:04 - 开始上传图片: /mnt/save/warning/warning_20251031_132002.jpg +2025-10-31 13:20:05 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:05 - 数据库插入成功 +2025-10-31 13:20:05 - 上传线程结束: /mnt/save/warning/warning_20251031_132002.jpg: 成功! +2025-10-31 13:20:06 - 开始上传图片: /mnt/save/warning/warning_20251031_132005.jpg +2025-10-31 13:20:06 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:06 - 数据库插入成功 +2025-10-31 13:20:06 - 上传线程结束: /mnt/save/warning/warning_20251031_132003.jpg: 成功! +2025-10-31 13:20:07 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:07 - 数据库插入成功 +2025-10-31 13:20:07 - 上传线程结束: /mnt/save/warning/warning_20251031_132005.jpg: 成功! +2025-10-31 13:20:08 - 开始上传图片: /mnt/save/warning/warning_20251031_132006.jpg +2025-10-31 13:20:09 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:09 - 数据库插入成功 +2025-10-31 13:20:09 - 上传线程结束: /mnt/save/warning/warning_20251031_132006.jpg: 成功! +2025-10-31 13:20:16 - 开始上传图片: /mnt/save/warning/warning_20251031_132015.jpg +2025-10-31 13:20:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:17 - 数据库插入成功 +2025-10-31 13:20:17 - 上传线程结束: /mnt/save/warning/warning_20251031_132015.jpg: 成功! +2025-10-31 13:20:18 - 开始上传图片: /mnt/save/warning/warning_20251031_132018.jpg +2025-10-31 13:20:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:19 - 数据库插入成功 +2025-10-31 13:20:19 - 上传线程结束: /mnt/save/warning/warning_20251031_132018.jpg: 成功! +2025-10-31 13:20:32 - 开始上传图片: /mnt/save/warning/warning_20251031_132031.jpg +2025-10-31 13:20:32 - 开始上传图片: /mnt/save/warning/warning_20251031_132032.jpg +2025-10-31 13:20:33 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:33 - 数据库插入成功 +2025-10-31 13:20:33 - 上传线程结束: /mnt/save/warning/warning_20251031_132031.jpg: 成功! +2025-10-31 13:20:34 - 开始上传图片: /mnt/save/warning/warning_20251031_132033.jpg +2025-10-31 13:20:34 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:34 - 数据库插入成功 +2025-10-31 13:20:34 - 上传线程结束: /mnt/save/warning/warning_20251031_132032.jpg: 成功! +2025-10-31 13:20:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:35 - 数据库插入成功 +2025-10-31 13:20:35 - 上传线程结束: /mnt/save/warning/warning_20251031_132033.jpg: 成功! +2025-10-31 13:20:40 - 开始上传图片: /mnt/save/warning/warning_20251031_132039.jpg +2025-10-31 13:20:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:41 - 数据库插入成功 +2025-10-31 13:20:41 - 上传线程结束: /mnt/save/warning/warning_20251031_132039.jpg: 成功! +2025-10-31 13:20:42 - 开始上传图片: /mnt/save/warning/warning_20251031_132041.jpg +2025-10-31 13:20:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:43 - 数据库插入成功 +2025-10-31 13:20:43 - 上传线程结束: /mnt/save/warning/warning_20251031_132041.jpg: 成功! +2025-10-31 13:20:44 - 开始上传图片: /mnt/save/warning/warning_20251031_132042.jpg +2025-10-31 13:20:44 - 开始上传图片: /mnt/save/warning/warning_20251031_132043.jpg +2025-10-31 13:20:44 - 开始上传图片: /mnt/save/warning/warning_20251031_132044.jpg +2025-10-31 13:20:45 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:45 - 数据库插入成功 +2025-10-31 13:20:45 - 上传线程结束: /mnt/save/warning/warning_20251031_132043.jpg: 成功! +2025-10-31 13:20:46 - 开始上传图片: /mnt/save/warning/warning_20251031_132045.jpg +2025-10-31 13:20:46 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:46 - 数据库插入成功 +2025-10-31 13:20:46 - 上传线程结束: /mnt/save/warning/warning_20251031_132042.jpg: 成功! +2025-10-31 13:20:47 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:47 - 数据库插入成功 +2025-10-31 13:20:47 - 上传线程结束: /mnt/save/warning/warning_20251031_132044.jpg: 成功! +2025-10-31 13:20:48 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:48 - 数据库插入成功 +2025-10-31 13:20:48 - 上传线程结束: /mnt/save/warning/warning_20251031_132045.jpg: 成功! +2025-10-31 13:20:58 - 开始上传图片: /mnt/save/warning/warning_20251031_132057.jpg +2025-10-31 13:20:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:20:59 - 数据库插入成功 +2025-10-31 13:20:59 - 上传线程结束: /mnt/save/warning/warning_20251031_132057.jpg: 成功! +2025-10-31 13:21:00 - 开始上传图片: /mnt/save/warning/warning_20251031_132100.jpg +2025-10-31 13:21:01 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:01 - 数据库插入成功 +2025-10-31 13:21:01 - 上传线程结束: /mnt/save/warning/warning_20251031_132100.jpg: 成功! +2025-10-31 13:21:06 - 开始上传图片: /mnt/save/warning/warning_20251031_132104.jpg +2025-10-31 13:21:06 - 开始上传图片: /mnt/save/warning/warning_20251031_132105.jpg +2025-10-31 13:21:06 - 开始上传图片: /mnt/save/warning/warning_20251031_132106.jpg +2025-10-31 13:21:07 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:07 - 数据库插入成功 +2025-10-31 13:21:07 - 上传线程结束: /mnt/save/warning/warning_20251031_132104.jpg: 成功! +2025-10-31 13:21:08 - 开始上传图片: /mnt/save/warning/warning_20251031_132108.jpg +2025-10-31 13:21:08 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:08 - 数据库插入成功 +2025-10-31 13:21:08 - 上传线程结束: /mnt/save/warning/warning_20251031_132105.jpg: 成功! +2025-10-31 13:21:09 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:09 - 数据库插入成功 +2025-10-31 13:21:09 - 上传线程结束: /mnt/save/warning/warning_20251031_132106.jpg: 成功! +2025-10-31 13:21:10 - 开始上传图片: /mnt/save/warning/warning_20251031_132109.jpg +2025-10-31 13:21:10 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:10 - 数据库插入成功 +2025-10-31 13:21:10 - 上传线程结束: /mnt/save/warning/warning_20251031_132108.jpg: 成功! +2025-10-31 13:21:11 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:11 - 数据库插入成功 +2025-10-31 13:21:11 - 上传线程结束: /mnt/save/warning/warning_20251031_132109.jpg: 成功! +2025-10-31 13:21:12 - 开始上传图片: /mnt/save/warning/warning_20251031_132111.jpg +2025-10-31 13:21:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:13 - 数据库插入成功 +2025-10-31 13:21:13 - 上传线程结束: /mnt/save/warning/warning_20251031_132111.jpg: 成功! +2025-10-31 13:21:14 - 开始上传图片: /mnt/save/warning/warning_20251031_132113.jpg +2025-10-31 13:21:14 - 开始上传图片: /mnt/save/warning/warning_20251031_132114.jpg +2025-10-31 13:21:15 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:16 - 数据库插入成功 +2025-10-31 13:21:16 - 上传线程结束: /mnt/save/warning/warning_20251031_132113.jpg: 成功! +2025-10-31 13:21:16 - 开始上传图片: /mnt/save/warning/warning_20251031_132116.jpg +2025-10-31 13:21:16 - 开始上传图片: /mnt/save/warning/warning_20251031_132115.jpg +2025-10-31 13:21:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:17 - 数据库插入成功 +2025-10-31 13:21:17 - 上传线程结束: /mnt/save/warning/warning_20251031_132114.jpg: 成功! +2025-10-31 13:21:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:17 - 数据库插入成功 +2025-10-31 13:21:17 - 上传线程结束: /mnt/save/warning/warning_20251031_132116.jpg: 成功! +2025-10-31 13:21:18 - 开始上传图片: /mnt/save/warning/warning_20251031_132117.jpg +2025-10-31 13:21:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:19 - 数据库插入成功 +2025-10-31 13:21:19 - 上传线程结束: /mnt/save/warning/warning_20251031_132115.jpg: 成功! +2025-10-31 13:21:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:19 - 数据库插入成功 +2025-10-31 13:21:19 - 上传线程结束: /mnt/save/warning/warning_20251031_132117.jpg: 成功! +2025-10-31 13:21:22 - 开始上传图片: /mnt/save/warning/warning_20251031_132121.jpg +2025-10-31 13:21:23 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:24 - 数据库插入成功 +2025-10-31 13:21:24 - 上传线程结束: /mnt/save/warning/warning_20251031_132121.jpg: 成功! +2025-10-31 13:21:24 - 开始上传图片: /mnt/save/warning/warning_20251031_132124.jpg +2025-10-31 13:21:25 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:26 - 数据库插入成功 +2025-10-31 13:21:26 - 上传线程结束: /mnt/save/warning/warning_20251031_132124.jpg: 成功! +2025-10-31 13:21:34 - 开始上传图片: /mnt/save/warning/warning_20251031_132133.jpg +2025-10-31 13:21:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:36 - 数据库插入成功 +2025-10-31 13:21:36 - 上传线程结束: /mnt/save/warning/warning_20251031_132133.jpg: 成功! +2025-10-31 13:21:36 - 开始上传图片: /mnt/save/warning/warning_20251031_132136.jpg +2025-10-31 13:21:36 - 开始上传图片: /mnt/save/warning/warning_20251031_132135.jpg +2025-10-31 13:21:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:38 - 数据库插入成功 +2025-10-31 13:21:38 - 上传线程结束: /mnt/save/warning/warning_20251031_132136.jpg: 成功! +2025-10-31 13:21:38 - 开始上传图片: /mnt/save/warning/warning_20251031_132137.jpg +2025-10-31 13:21:38 - 开始上传图片: /mnt/save/warning/warning_20251031_132138.jpg +2025-10-31 13:21:38 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:39 - 数据库插入成功 +2025-10-31 13:21:39 - 上传线程结束: /mnt/save/warning/warning_20251031_132135.jpg: 成功! +2025-10-31 13:21:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:40 - 数据库插入成功 +2025-10-31 13:21:40 - 上传线程结束: /mnt/save/warning/warning_20251031_132138.jpg: 成功! +2025-10-31 13:21:40 - 开始上传图片: /mnt/save/warning/warning_20251031_132139.jpg +2025-10-31 13:21:40 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:41 - 数据库插入成功 +2025-10-31 13:21:41 - 上传线程结束: /mnt/save/warning/warning_20251031_132137.jpg: 成功! +2025-10-31 13:21:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:42 - 数据库插入成功 +2025-10-31 13:21:42 - 上传线程结束: /mnt/save/warning/warning_20251031_132139.jpg: 成功! +2025-10-31 13:21:46 - 开始上传图片: /mnt/save/warning/warning_20251031_132146.jpg +2025-10-31 13:21:47 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:48 - 数据库插入成功 +2025-10-31 13:21:48 - 上传线程结束: /mnt/save/warning/warning_20251031_132146.jpg: 成功! +2025-10-31 13:21:48 - 开始上传图片: /mnt/save/warning/warning_20251031_132147.jpg +2025-10-31 13:21:49 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:50 - 数据库插入成功 +2025-10-31 13:21:50 - 上传线程结束: /mnt/save/warning/warning_20251031_132147.jpg: 成功! +2025-10-31 13:21:50 - 开始上传图片: /mnt/save/warning/warning_20251031_132149.jpg +2025-10-31 13:21:51 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:52 - 数据库插入成功 +2025-10-31 13:21:52 - 上传线程结束: /mnt/save/warning/warning_20251031_132149.jpg: 成功! +2025-10-31 13:21:52 - 开始上传图片: /mnt/save/warning/warning_20251031_132150.jpg +2025-10-31 13:21:52 - 开始上传图片: /mnt/save/warning/warning_20251031_132151.jpg +2025-10-31 13:21:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:54 - 数据库插入成功 +2025-10-31 13:21:54 - 上传线程结束: /mnt/save/warning/warning_20251031_132151.jpg: 成功! +2025-10-31 13:21:54 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:21:55 - 数据库插入成功 +2025-10-31 13:21:55 - 上传线程结束: /mnt/save/warning/warning_20251031_132150.jpg: 成功! +2025-10-31 13:22:08 - 开始上传图片: /mnt/save/warning/warning_20251031_132208.jpg +2025-10-31 13:22:10 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:10 - 数据库插入成功 +2025-10-31 13:22:10 - 上传线程结束: /mnt/save/warning/warning_20251031_132208.jpg: 成功! +2025-10-31 13:22:10 - 开始上传图片: /mnt/save/warning/warning_20251031_132209.jpg +2025-10-31 13:22:10 - 开始上传图片: /mnt/save/warning/warning_20251031_132210.jpg +2025-10-31 13:22:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:12 - 数据库插入成功 +2025-10-31 13:22:12 - 上传线程结束: /mnt/save/warning/warning_20251031_132210.jpg: 成功! +2025-10-31 13:22:12 - 开始上传图片: /mnt/save/warning/warning_20251031_132211.jpg +2025-10-31 13:22:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:13 - 数据库插入成功 +2025-10-31 13:22:13 - 上传线程结束: /mnt/save/warning/warning_20251031_132209.jpg: 成功! +2025-10-31 13:22:14 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:14 - 数据库插入成功 +2025-10-31 13:22:14 - 上传线程结束: /mnt/save/warning/warning_20251031_132211.jpg: 成功! +2025-10-31 13:22:17 - 开始上传图片: /mnt/save/warning/warning_20251031_132216.jpg +2025-10-31 13:22:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:18 - 数据库插入成功 +2025-10-31 13:22:18 - 上传线程结束: /mnt/save/warning/warning_20251031_132216.jpg: 成功! +2025-10-31 13:22:19 - 开始上传图片: /mnt/save/warning/warning_20251031_132217.jpg +2025-10-31 13:22:19 - 开始上传图片: /mnt/save/warning/warning_20251031_132218.jpg +2025-10-31 13:22:20 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:20 - 数据库插入成功 +2025-10-31 13:22:20 - 上传线程结束: /mnt/save/warning/warning_20251031_132217.jpg: 成功! +2025-10-31 13:22:21 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:21 - 数据库插入成功 +2025-10-31 13:22:21 - 上传线程结束: /mnt/save/warning/warning_20251031_132218.jpg: 成功! +2025-10-31 13:22:23 - 开始上传图片: /mnt/save/warning/warning_20251031_132222.jpg +2025-10-31 13:22:24 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:24 - 数据库插入成功 +2025-10-31 13:22:24 - 上传线程结束: /mnt/save/warning/warning_20251031_132222.jpg: 成功! +2025-10-31 13:22:25 - 开始上传图片: /mnt/save/warning/warning_20251031_132223.jpg +2025-10-31 13:22:25 - 开始上传图片: /mnt/save/warning/warning_20251031_132224.jpg +2025-10-31 13:22:26 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:27 - 数据库插入成功 +2025-10-31 13:22:27 - 上传线程结束: /mnt/save/warning/warning_20251031_132223.jpg: 成功! +2025-10-31 13:22:27 - 开始上传图片: /mnt/save/warning/warning_20251031_132226.jpg +2025-10-31 13:22:27 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:27 - 数据库插入成功 +2025-10-31 13:22:27 - 上传线程结束: /mnt/save/warning/warning_20251031_132224.jpg: 成功! +2025-10-31 13:22:28 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:28 - 数据库插入成功 +2025-10-31 13:22:28 - 上传线程结束: /mnt/save/warning/warning_20251031_132226.jpg: 成功! +2025-10-31 13:22:29 - 开始上传图片: /mnt/save/warning/warning_20251031_132228.jpg +2025-10-31 13:22:30 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:30 - 数据库插入成功 +2025-10-31 13:22:30 - 上传线程结束: /mnt/save/warning/warning_20251031_132228.jpg: 成功! +2025-10-31 13:22:35 - 开始上传图片: /mnt/save/warning/warning_20251031_132234.jpg +2025-10-31 13:22:36 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:22:36 - 数据库插入成功 +2025-10-31 13:22:36 - 上传线程结束: /mnt/save/warning/warning_20251031_132234.jpg: 成功! +2025-10-31 13:23:01 - 开始上传图片: /mnt/save/warning/warning_20251031_132301.jpg +2025-10-31 13:23:01 - 开始上传图片: /mnt/save/warning/warning_20251031_132300.jpg +2025-10-31 13:23:02 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:23:02 - 数据库插入成功 +2025-10-31 13:23:02 - 上传线程结束: /mnt/save/warning/warning_20251031_132300.jpg: 成功! +2025-10-31 13:23:03 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:23:03 - 数据库插入成功 +2025-10-31 13:23:03 - 上传线程结束: /mnt/save/warning/warning_20251031_132301.jpg: 成功! +2025-10-31 13:23:07 - 开始上传图片: /mnt/save/warning/warning_20251031_132306.jpg +2025-10-31 13:23:08 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:23:08 - 数据库插入成功 +2025-10-31 13:23:08 - 上传线程结束: /mnt/save/warning/warning_20251031_132306.jpg: 成功! +2025-10-31 13:23:09 - 开始上传图片: /mnt/save/warning/warning_20251031_132308.jpg +2025-10-31 13:23:10 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:23:10 - 数据库插入成功 +2025-10-31 13:23:10 - 上传线程结束: /mnt/save/warning/warning_20251031_132308.jpg: 成功! +2025-10-31 13:23:11 - 开始上传图片: /mnt/save/warning/warning_20251031_132310.jpg +2025-10-31 13:23:11 - 开始上传图片: /mnt/save/warning/warning_20251031_132309.jpg +2025-10-31 13:23:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:23:12 - 数据库插入成功 +2025-10-31 13:23:12 - 上传线程结束: /mnt/save/warning/warning_20251031_132309.jpg: 成功! +2025-10-31 13:23:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:23:13 - 数据库插入成功 +2025-10-31 13:23:13 - 上传线程结束: /mnt/save/warning/warning_20251031_132310.jpg: 成功! +2025-10-31 13:23:15 - 开始上传图片: /mnt/save/warning/warning_20251031_132315.jpg +2025-10-31 13:23:15 - 开始上传图片: /mnt/save/warning/warning_20251031_132314.jpg +2025-10-31 13:23:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:23:16 - 数据库插入成功 +2025-10-31 13:23:16 - 上传线程结束: /mnt/save/warning/warning_20251031_132315.jpg: 成功! +2025-10-31 13:23:17 - 开始上传图片: /mnt/save/warning/warning_20251031_132317.jpg +2025-10-31 13:23:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:23:17 - 数据库插入成功 +2025-10-31 13:23:17 - 上传线程结束: /mnt/save/warning/warning_20251031_132314.jpg: 成功! +2025-10-31 13:23:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:23:18 - 数据库插入成功 +2025-10-31 13:23:18 - 上传线程结束: /mnt/save/warning/warning_20251031_132317.jpg: 成功! +2025-10-31 13:24:54 - 开始上传图片: /mnt/save/warning/warning_20251031_132453.jpg +2025-10-31 13:24:55 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:24:55 - 数据库插入成功 +2025-10-31 13:24:55 - 上传线程结束: /mnt/save/warning/warning_20251031_132453.jpg: 成功! +2025-10-31 13:24:56 - 开始上传图片: /mnt/save/warning/warning_20251031_132454.jpg +2025-10-31 13:24:57 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:24:57 - 数据库插入成功 +2025-10-31 13:24:57 - 上传线程结束: /mnt/save/warning/warning_20251031_132454.jpg: 成功! +2025-10-31 13:24:58 - 开始上传图片: /mnt/save/warning/warning_20251031_132457.jpg +2025-10-31 13:24:58 - 开始上传图片: /mnt/save/warning/warning_20251031_132458.jpg +2025-10-31 13:24:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:24:59 - 数据库插入成功 +2025-10-31 13:24:59 - 上传线程结束: /mnt/save/warning/warning_20251031_132458.jpg: 成功! +2025-10-31 13:25:00 - 开始上传图片: /mnt/save/warning/warning_20251031_132459.jpg +2025-10-31 13:25:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:00 - 数据库插入成功 +2025-10-31 13:25:00 - 上传线程结束: /mnt/save/warning/warning_20251031_132457.jpg: 成功! +2025-10-31 13:25:01 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:01 - 数据库插入成功 +2025-10-31 13:25:01 - 上传线程结束: /mnt/save/warning/warning_20251031_132459.jpg: 成功! +2025-10-31 13:25:02 - 开始上传图片: /mnt/save/warning/warning_20251031_132501.jpg +2025-10-31 13:25:03 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:03 - 数据库插入成功 +2025-10-31 13:25:03 - 上传线程结束: /mnt/save/warning/warning_20251031_132501.jpg: 成功! +2025-10-31 13:25:04 - 开始上传图片: /mnt/save/warning/warning_20251031_132503.jpg +2025-10-31 13:25:04 - 开始上传图片: /mnt/save/warning/warning_20251031_132502.jpg +2025-10-31 13:25:05 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:05 - 数据库插入成功 +2025-10-31 13:25:05 - 上传线程结束: /mnt/save/warning/warning_20251031_132503.jpg: 成功! +2025-10-31 13:25:06 - 开始上传图片: /mnt/save/warning/warning_20251031_132504.jpg +2025-10-31 13:25:06 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:06 - 开始上传图片: /mnt/save/warning/warning_20251031_132506.jpg +2025-10-31 13:25:06 - 数据库插入成功 +2025-10-31 13:25:06 - 上传线程结束: /mnt/save/warning/warning_20251031_132502.jpg: 成功! +2025-10-31 13:25:07 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:07 - 数据库插入成功 +2025-10-31 13:25:07 - 上传线程结束: /mnt/save/warning/warning_20251031_132504.jpg: 成功! +2025-10-31 13:25:08 - 开始上传图片: /mnt/save/warning/warning_20251031_132507.jpg +2025-10-31 13:25:08 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:08 - 数据库插入成功 +2025-10-31 13:25:08 - 上传线程结束: /mnt/save/warning/warning_20251031_132506.jpg: 成功! +2025-10-31 13:25:09 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:09 - 数据库插入成功 +2025-10-31 13:25:09 - 上传线程结束: /mnt/save/warning/warning_20251031_132507.jpg: 成功! +2025-10-31 13:25:10 - 开始上传图片: /mnt/save/warning/warning_20251031_132509.jpg +2025-10-31 13:25:11 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:11 - 数据库插入成功 +2025-10-31 13:25:11 - 上传线程结束: /mnt/save/warning/warning_20251031_132509.jpg: 成功! +2025-10-31 13:25:12 - 开始上传图片: /mnt/save/warning/warning_20251031_132511.jpg +2025-10-31 13:25:12 - 开始上传图片: /mnt/save/warning/warning_20251031_132510.jpg +2025-10-31 13:25:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:13 - 数据库插入成功 +2025-10-31 13:25:13 - 上传线程结束: /mnt/save/warning/warning_20251031_132511.jpg: 成功! +2025-10-31 13:25:14 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:14 - 数据库插入成功 +2025-10-31 13:25:14 - 上传线程结束: /mnt/save/warning/warning_20251031_132510.jpg: 成功! +2025-10-31 13:25:16 - 开始上传图片: /mnt/save/warning/warning_20251031_132515.jpg +2025-10-31 13:25:16 - 开始上传图片: /mnt/save/warning/warning_20251031_132514.jpg +2025-10-31 13:25:16 - 开始上传图片: /mnt/save/warning/warning_20251031_132516.jpg +2025-10-31 13:25:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:17 - 数据库插入成功 +2025-10-31 13:25:17 - 上传线程结束: /mnt/save/warning/warning_20251031_132515.jpg: 成功! +2025-10-31 13:25:18 - 开始上传图片: /mnt/save/warning/warning_20251031_132517.jpg +2025-10-31 13:25:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:18 - 开始上传图片: /mnt/save/warning/warning_20251031_132518.jpg +2025-10-31 13:25:18 - 数据库插入成功 +2025-10-31 13:25:18 - 上传线程结束: /mnt/save/warning/warning_20251031_132516.jpg: 成功! +2025-10-31 13:25:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:19 - 数据库插入成功 +2025-10-31 13:25:19 - 上传线程结束: /mnt/save/warning/warning_20251031_132514.jpg: 成功! +2025-10-31 13:25:20 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:20 - 开始上传图片: /mnt/save/warning/warning_20251031_132519.jpg +2025-10-31 13:25:20 - 开始上传图片: /mnt/save/warning/warning_20251031_132520.jpg +2025-10-31 13:25:20 - 数据库插入成功 +2025-10-31 13:25:20 - 上传线程结束: /mnt/save/warning/warning_20251031_132517.jpg: 成功! +2025-10-31 13:25:21 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:21 - 数据库插入成功 +2025-10-31 13:25:21 - 上传线程结束: /mnt/save/warning/warning_20251031_132518.jpg: 成功! +2025-10-31 13:25:22 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:22 - 数据库插入成功 +2025-10-31 13:25:22 - 上传线程结束: /mnt/save/warning/warning_20251031_132519.jpg: 成功! +2025-10-31 13:25:23 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:23 - 数据库插入成功 +2025-10-31 13:25:23 - 上传线程结束: /mnt/save/warning/warning_20251031_132520.jpg: 成功! +2025-10-31 13:25:32 - 开始上传图片: /mnt/save/warning/warning_20251031_132531.jpg +2025-10-31 13:25:33 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:33 - 数据库插入成功 +2025-10-31 13:25:33 - 上传线程结束: /mnt/save/warning/warning_20251031_132531.jpg: 成功! +2025-10-31 13:25:34 - 开始上传图片: /mnt/save/warning/warning_20251031_132534.jpg +2025-10-31 13:25:34 - 开始上传图片: /mnt/save/warning/warning_20251031_132533.jpg +2025-10-31 13:25:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:35 - 数据库插入成功 +2025-10-31 13:25:35 - 上传线程结束: /mnt/save/warning/warning_20251031_132534.jpg: 成功! +2025-10-31 13:25:36 - 开始上传图片: /mnt/save/warning/warning_20251031_132536.jpg +2025-10-31 13:25:36 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:36 - 开始上传图片: /mnt/save/warning/warning_20251031_132535.jpg +2025-10-31 13:25:37 - 数据库插入成功 +2025-10-31 13:25:37 - 上传线程结束: /mnt/save/warning/warning_20251031_132533.jpg: 成功! +2025-10-31 13:25:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:37 - 数据库插入成功 +2025-10-31 13:25:37 - 上传线程结束: /mnt/save/warning/warning_20251031_132536.jpg: 成功! +2025-10-31 13:25:38 - 开始上传图片: /mnt/save/warning/warning_20251031_132537.jpg +2025-10-31 13:25:38 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:38 - 数据库插入成功 +2025-10-31 13:25:38 - 上传线程结束: /mnt/save/warning/warning_20251031_132535.jpg: 成功! +2025-10-31 13:25:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:40 - 数据库插入成功 +2025-10-31 13:25:40 - 上传线程结束: /mnt/save/warning/warning_20251031_132537.jpg: 成功! +2025-10-31 13:25:40 - 开始上传图片: /mnt/save/warning/warning_20251031_132539.jpg +2025-10-31 13:25:40 - 开始上传图片: /mnt/save/warning/warning_20251031_132538.jpg +2025-10-31 13:25:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:42 - 数据库插入成功 +2025-10-31 13:25:42 - 上传线程结束: /mnt/save/warning/warning_20251031_132539.jpg: 成功! +2025-10-31 13:25:42 - 开始上传图片: /mnt/save/warning/warning_20251031_132542.jpg +2025-10-31 13:25:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:43 - 数据库插入成功 +2025-10-31 13:25:43 - 上传线程结束: /mnt/save/warning/warning_20251031_132538.jpg: 成功! +2025-10-31 13:25:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:44 - 数据库插入成功 +2025-10-31 13:25:44 - 上传线程结束: /mnt/save/warning/warning_20251031_132542.jpg: 成功! +2025-10-31 13:25:44 - 开始上传图片: /mnt/save/warning/warning_20251031_132543.jpg +2025-10-31 13:25:45 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:46 - 数据库插入成功 +2025-10-31 13:25:46 - 上传线程结束: /mnt/save/warning/warning_20251031_132543.jpg: 成功! +2025-10-31 13:25:46 - 开始上传图片: /mnt/save/warning/warning_20251031_132546.jpg +2025-10-31 13:25:47 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:48 - 数据库插入成功 +2025-10-31 13:25:48 - 上传线程结束: /mnt/save/warning/warning_20251031_132546.jpg: 成功! +2025-10-31 13:25:50 - 开始上传图片: /mnt/save/warning/warning_20251031_132550.jpg +2025-10-31 13:25:50 - 开始上传图片: /mnt/save/warning/warning_20251031_132549.jpg +2025-10-31 13:25:51 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:52 - 数据库插入成功 +2025-10-31 13:25:52 - 上传线程结束: /mnt/save/warning/warning_20251031_132549.jpg: 成功! +2025-10-31 13:25:52 - 开始上传图片: /mnt/save/warning/warning_20251031_132551.jpg +2025-10-31 13:25:52 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:53 - 数据库插入成功 +2025-10-31 13:25:53 - 上传线程结束: /mnt/save/warning/warning_20251031_132550.jpg: 成功! +2025-10-31 13:25:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:54 - 数据库插入成功 +2025-10-31 13:25:54 - 上传线程结束: /mnt/save/warning/warning_20251031_132551.jpg: 成功! +2025-10-31 13:25:54 - 开始上传图片: /mnt/save/warning/warning_20251031_132552.jpg +2025-10-31 13:25:55 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:56 - 数据库插入成功 +2025-10-31 13:25:56 - 上传线程结束: /mnt/save/warning/warning_20251031_132552.jpg: 成功! +2025-10-31 13:25:56 - 开始上传图片: /mnt/save/warning/warning_20251031_132556.jpg +2025-10-31 13:25:57 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:25:58 - 数据库插入成功 +2025-10-31 13:25:58 - 上传线程结束: /mnt/save/warning/warning_20251031_132556.jpg: 成功! +2025-10-31 13:25:58 - 开始上传图片: /mnt/save/warning/warning_20251031_132557.jpg +2025-10-31 13:25:58 - 开始上传图片: /mnt/save/warning/warning_20251031_132558.jpg +2025-10-31 13:25:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:00 - 数据库插入成功 +2025-10-31 13:26:00 - 上传线程结束: /mnt/save/warning/warning_20251031_132557.jpg: 成功! +2025-10-31 13:26:00 - 开始上传图片: /mnt/save/warning/warning_20251031_132600.jpg +2025-10-31 13:26:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:01 - 数据库插入成功 +2025-10-31 13:26:01 - 上传线程结束: /mnt/save/warning/warning_20251031_132558.jpg: 成功! +2025-10-31 13:26:01 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:02 - 数据库插入成功 +2025-10-31 13:26:02 - 上传线程结束: /mnt/save/warning/warning_20251031_132600.jpg: 成功! +2025-10-31 13:26:02 - 开始上传图片: /mnt/save/warning/warning_20251031_132601.jpg +2025-10-31 13:26:03 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:04 - 数据库插入成功 +2025-10-31 13:26:04 - 上传线程结束: /mnt/save/warning/warning_20251031_132601.jpg: 成功! +2025-10-31 13:26:12 - 开始上传图片: /mnt/save/warning/warning_20251031_132612.jpg +2025-10-31 13:26:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:14 - 数据库插入成功 +2025-10-31 13:26:14 - 上传线程结束: /mnt/save/warning/warning_20251031_132612.jpg: 成功! +2025-10-31 13:26:14 - 开始上传图片: /mnt/save/warning/warning_20251031_132614.jpg +2025-10-31 13:26:14 - 开始上传图片: /mnt/save/warning/warning_20251031_132613.jpg +2025-10-31 13:26:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:16 - 数据库插入成功 +2025-10-31 13:26:16 - 上传线程结束: /mnt/save/warning/warning_20251031_132614.jpg: 成功! +2025-10-31 13:26:16 - 开始上传图片: /mnt/save/warning/warning_20251031_132616.jpg +2025-10-31 13:26:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:17 - 数据库插入成功 +2025-10-31 13:26:17 - 上传线程结束: /mnt/save/warning/warning_20251031_132613.jpg: 成功! +2025-10-31 13:26:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:18 - 数据库插入成功 +2025-10-31 13:26:18 - 上传线程结束: /mnt/save/warning/warning_20251031_132616.jpg: 成功! +2025-10-31 13:26:21 - 开始上传图片: /mnt/save/warning/warning_20251031_132620.jpg +2025-10-31 13:26:22 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:22 - 数据库插入成功 +2025-10-31 13:26:22 - 上传线程结束: /mnt/save/warning/warning_20251031_132620.jpg: 成功! +2025-10-31 13:26:23 - 开始上传图片: /mnt/save/warning/warning_20251031_132621.jpg +2025-10-31 13:26:23 - 开始上传图片: /mnt/save/warning/warning_20251031_132622.jpg +2025-10-31 13:26:24 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:24 - 数据库插入成功 +2025-10-31 13:26:24 - 上传线程结束: /mnt/save/warning/warning_20251031_132621.jpg: 成功! +2025-10-31 13:26:25 - 开始上传图片: /mnt/save/warning/warning_20251031_132624.jpg +2025-10-31 13:26:25 - 开始上传图片: /mnt/save/warning/warning_20251031_132623.jpg +2025-10-31 13:26:25 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:25 - 数据库插入成功 +2025-10-31 13:26:25 - 上传线程结束: /mnt/save/warning/warning_20251031_132622.jpg: 成功! +2025-10-31 13:26:26 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:26 - 数据库插入成功 +2025-10-31 13:26:26 - 上传线程结束: /mnt/save/warning/warning_20251031_132623.jpg: 成功! +2025-10-31 13:26:27 - 开始上传图片: /mnt/save/warning/warning_20251031_132626.jpg +2025-10-31 13:26:27 - 开始上传图片: /mnt/save/warning/warning_20251031_132625.jpg +2025-10-31 13:26:27 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:27 - 数据库插入成功 +2025-10-31 13:26:27 - 上传线程结束: /mnt/save/warning/warning_20251031_132624.jpg: 成功! +2025-10-31 13:26:28 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:28 - 数据库插入成功 +2025-10-31 13:26:28 - 上传线程结束: /mnt/save/warning/warning_20251031_132626.jpg: 成功! +2025-10-31 13:26:29 - 开始上传图片: /mnt/save/warning/warning_20251031_132627.jpg +2025-10-31 13:26:29 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:29 - 开始上传图片: /mnt/save/warning/warning_20251031_132628.jpg +2025-10-31 13:26:29 - 数据库插入成功 +2025-10-31 13:26:29 - 上传线程结束: /mnt/save/warning/warning_20251031_132625.jpg: 成功! +2025-10-31 13:26:30 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:30 - 数据库插入成功 +2025-10-31 13:26:30 - 上传线程结束: /mnt/save/warning/warning_20251031_132627.jpg: 成功! +2025-10-31 13:26:31 - 开始上传图片: /mnt/save/warning/warning_20251031_132631.jpg +2025-10-31 13:26:31 - 开始上传图片: /mnt/save/warning/warning_20251031_132630.jpg +2025-10-31 13:26:31 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:31 - 数据库插入成功 +2025-10-31 13:26:31 - 上传线程结束: /mnt/save/warning/warning_20251031_132628.jpg: 成功! +2025-10-31 13:26:32 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:32 - 数据库插入成功 +2025-10-31 13:26:32 - 上传线程结束: /mnt/save/warning/warning_20251031_132631.jpg: 成功! +2025-10-31 13:26:33 - 开始上传图片: /mnt/save/warning/warning_20251031_132632.jpg +2025-10-31 13:26:33 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:33 - 数据库插入成功 +2025-10-31 13:26:33 - 上传线程结束: /mnt/save/warning/warning_20251031_132630.jpg: 成功! +2025-10-31 13:26:34 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:34 - 数据库插入成功 +2025-10-31 13:26:34 - 上传线程结束: /mnt/save/warning/warning_20251031_132632.jpg: 成功! +2025-10-31 13:26:35 - 开始上传图片: /mnt/save/warning/warning_20251031_132633.jpg +2025-10-31 13:26:35 - 开始上传图片: /mnt/save/warning/warning_20251031_132634.jpg +2025-10-31 13:26:36 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:36 - 数据库插入成功 +2025-10-31 13:26:36 - 上传线程结束: /mnt/save/warning/warning_20251031_132634.jpg: 成功! +2025-10-31 13:26:37 - 开始上传图片: /mnt/save/warning/warning_20251031_132635.jpg +2025-10-31 13:26:37 - 开始上传图片: /mnt/save/warning/warning_20251031_132636.jpg +2025-10-31 13:26:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:37 - 数据库插入成功 +2025-10-31 13:26:37 - 上传线程结束: /mnt/save/warning/warning_20251031_132633.jpg: 成功! +2025-10-31 13:26:38 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:38 - 数据库插入成功 +2025-10-31 13:26:38 - 上传线程结束: /mnt/save/warning/warning_20251031_132636.jpg: 成功! +2025-10-31 13:26:39 - 开始上传图片: /mnt/save/warning/warning_20251031_132638.jpg +2025-10-31 13:26:39 - 开始上传图片: /mnt/save/warning/warning_20251031_132637.jpg +2025-10-31 13:26:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:39 - 数据库插入成功 +2025-10-31 13:26:39 - 上传线程结束: /mnt/save/warning/warning_20251031_132635.jpg: 成功! +2025-10-31 13:26:40 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:40 - 数据库插入成功 +2025-10-31 13:26:40 - 上传线程结束: /mnt/save/warning/warning_20251031_132638.jpg: 成功! +2025-10-31 13:26:41 - 开始上传图片: /mnt/save/warning/warning_20251031_132641.jpg +2025-10-31 13:26:41 - 开始上传图片: /mnt/save/warning/warning_20251031_132639.jpg +2025-10-31 13:26:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:41 - 开始上传图片: /mnt/save/warning/warning_20251031_132640.jpg +2025-10-31 13:26:41 - 数据库插入成功 +2025-10-31 13:26:41 - 上传线程结束: /mnt/save/warning/warning_20251031_132637.jpg: 成功! +2025-10-31 13:26:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:42 - 数据库插入成功 +2025-10-31 13:26:42 - 上传线程结束: /mnt/save/warning/warning_20251031_132639.jpg: 成功! +2025-10-31 13:26:43 - 开始上传图片: /mnt/save/warning/warning_20251031_132642.jpg +2025-10-31 13:26:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:43 - 数据库插入成功 +2025-10-31 13:26:43 - 上传线程结束: /mnt/save/warning/warning_20251031_132641.jpg: 成功! +2025-10-31 13:26:44 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:44 - 数据库插入成功 +2025-10-31 13:26:44 - 上传线程结束: /mnt/save/warning/warning_20251031_132640.jpg: 成功! +2025-10-31 13:26:45 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:45 - 开始上传图片: /mnt/save/warning/warning_20251031_132644.jpg +2025-10-31 13:26:45 - 开始上传图片: /mnt/save/warning/warning_20251031_132643.jpg +2025-10-31 13:26:45 - 数据库插入成功 +2025-10-31 13:26:45 - 上传线程结束: /mnt/save/warning/warning_20251031_132642.jpg: 成功! +2025-10-31 13:26:46 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:46 - 数据库插入成功 +2025-10-31 13:26:46 - 上传线程结束: /mnt/save/warning/warning_20251031_132644.jpg: 成功! +2025-10-31 13:26:47 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:47 - 数据库插入成功 +2025-10-31 13:26:47 - 上传线程结束: /mnt/save/warning/warning_20251031_132643.jpg: 成功! +2025-10-31 13:26:51 - 开始上传图片: /mnt/save/warning/warning_20251031_132651.jpg +2025-10-31 13:26:52 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:52 - 数据库插入成功 +2025-10-31 13:26:52 - 上传线程结束: /mnt/save/warning/warning_20251031_132651.jpg: 成功! +2025-10-31 13:26:55 - 开始上传图片: /mnt/save/warning/warning_20251031_132655.jpg +2025-10-31 13:26:55 - 开始上传图片: /mnt/save/warning/warning_20251031_132654.jpg +2025-10-31 13:26:56 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:56 - 数据库插入成功 +2025-10-31 13:26:56 - 上传线程结束: /mnt/save/warning/warning_20251031_132655.jpg: 成功! +2025-10-31 13:26:57 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:26:57 - 数据库插入成功 +2025-10-31 13:26:57 - 上传线程结束: /mnt/save/warning/warning_20251031_132654.jpg: 成功! +2025-10-31 13:26:59 - 开始上传图片: /mnt/save/warning/warning_20251031_132657.jpg +2025-10-31 13:27:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:00 - 数据库插入成功 +2025-10-31 13:27:00 - 上传线程结束: /mnt/save/warning/warning_20251031_132657.jpg: 成功! +2025-10-31 13:27:01 - 开始上传图片: /mnt/save/warning/warning_20251031_132700.jpg +2025-10-31 13:27:02 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:02 - 数据库插入成功 +2025-10-31 13:27:02 - 上传线程结束: /mnt/save/warning/warning_20251031_132700.jpg: 成功! +2025-10-31 13:27:03 - 开始上传图片: /mnt/save/warning/warning_20251031_132702.jpg +2025-10-31 13:27:04 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:04 - 数据库插入成功 +2025-10-31 13:27:04 - 上传线程结束: /mnt/save/warning/warning_20251031_132702.jpg: 成功! +2025-10-31 13:27:05 - 开始上传图片: /mnt/save/warning/warning_20251031_132704.jpg +2025-10-31 13:27:05 - 开始上传图片: /mnt/save/warning/warning_20251031_132705.jpg +2025-10-31 13:27:06 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:06 - 数据库插入成功 +2025-10-31 13:27:06 - 上传线程结束: /mnt/save/warning/warning_20251031_132704.jpg: 成功! +2025-10-31 13:27:07 - 开始上传图片: /mnt/save/warning/warning_20251031_132706.jpg +2025-10-31 13:27:07 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:07 - 开始上传图片: /mnt/save/warning/warning_20251031_132707.jpg +2025-10-31 13:27:07 - 数据库插入成功 +2025-10-31 13:27:07 - 上传线程结束: /mnt/save/warning/warning_20251031_132705.jpg: 成功! +2025-10-31 13:27:08 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:08 - 数据库插入成功 +2025-10-31 13:27:08 - 上传线程结束: /mnt/save/warning/warning_20251031_132706.jpg: 成功! +2025-10-31 13:27:09 - 开始上传图片: /mnt/save/warning/warning_20251031_132708.jpg +2025-10-31 13:27:09 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:09 - 数据库插入成功 +2025-10-31 13:27:09 - 上传线程结束: /mnt/save/warning/warning_20251031_132707.jpg: 成功! +2025-10-31 13:27:10 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:10 - 数据库插入成功 +2025-10-31 13:27:10 - 上传线程结束: /mnt/save/warning/warning_20251031_132708.jpg: 成功! +2025-10-31 13:27:11 - 开始上传图片: /mnt/save/warning/warning_20251031_132710.jpg +2025-10-31 13:27:11 - 开始上传图片: /mnt/save/warning/warning_20251031_132711.jpg +2025-10-31 13:27:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:12 - 数据库插入成功 +2025-10-31 13:27:12 - 上传线程结束: /mnt/save/warning/warning_20251031_132710.jpg: 成功! +2025-10-31 13:27:13 - 开始上传图片: /mnt/save/warning/warning_20251031_132712.jpg +2025-10-31 13:27:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:13 - 数据库插入成功 +2025-10-31 13:27:13 - 上传线程结束: /mnt/save/warning/warning_20251031_132711.jpg: 成功! +2025-10-31 13:27:14 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:14 - 数据库插入成功 +2025-10-31 13:27:14 - 上传线程结束: /mnt/save/warning/warning_20251031_132712.jpg: 成功! +2025-10-31 13:27:15 - 开始上传图片: /mnt/save/warning/warning_20251031_132713.jpg +2025-10-31 13:27:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:16 - 数据库插入成功 +2025-10-31 13:27:16 - 上传线程结束: /mnt/save/warning/warning_20251031_132713.jpg: 成功! +2025-10-31 13:27:17 - 开始上传图片: /mnt/save/warning/warning_20251031_132717.jpg +2025-10-31 13:27:17 - 开始上传图片: /mnt/save/warning/warning_20251031_132716.jpg +2025-10-31 13:27:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:19 - 数据库插入成功 +2025-10-31 13:27:19 - 上传线程结束: /mnt/save/warning/warning_20251031_132717.jpg: 成功! +2025-10-31 13:27:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:19 - 数据库插入成功 +2025-10-31 13:27:19 - 上传线程结束: /mnt/save/warning/warning_20251031_132716.jpg: 成功! +2025-10-31 13:27:29 - 开始上传图片: /mnt/save/warning/warning_20251031_132727.jpg +2025-10-31 13:27:30 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:31 - 数据库插入成功 +2025-10-31 13:27:31 - 上传线程结束: /mnt/save/warning/warning_20251031_132727.jpg: 成功! +2025-10-31 13:27:33 - 开始上传图片: /mnt/save/warning/warning_20251031_132732.jpg +2025-10-31 13:27:33 - 开始上传图片: /mnt/save/warning/warning_20251031_132733.jpg +2025-10-31 13:27:34 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:35 - 数据库插入成功 +2025-10-31 13:27:35 - 上传线程结束: /mnt/save/warning/warning_20251031_132732.jpg: 成功! +2025-10-31 13:27:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:36 - 数据库插入成功 +2025-10-31 13:27:36 - 上传线程结束: /mnt/save/warning/warning_20251031_132733.jpg: 成功! +2025-10-31 13:27:37 - 开始上传图片: /mnt/save/warning/warning_20251031_132736.jpg +2025-10-31 13:27:37 - 开始上传图片: /mnt/save/warning/warning_20251031_132737.jpg +2025-10-31 13:27:38 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:39 - 数据库插入成功 +2025-10-31 13:27:39 - 上传线程结束: /mnt/save/warning/warning_20251031_132736.jpg: 成功! +2025-10-31 13:27:39 - 开始上传图片: /mnt/save/warning/warning_20251031_132739.jpg +2025-10-31 13:27:39 - 开始上传图片: /mnt/save/warning/warning_20251031_132738.jpg +2025-10-31 13:27:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:40 - 数据库插入成功 +2025-10-31 13:27:40 - 上传线程结束: /mnt/save/warning/warning_20251031_132737.jpg: 成功! +2025-10-31 13:27:40 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:41 - 数据库插入成功 +2025-10-31 13:27:41 - 上传线程结束: /mnt/save/warning/warning_20251031_132739.jpg: 成功! +2025-10-31 13:27:41 - 开始上传图片: /mnt/save/warning/warning_20251031_132741.jpg +2025-10-31 13:27:41 - 开始上传图片: /mnt/save/warning/warning_20251031_132740.jpg +2025-10-31 13:27:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:42 - 数据库插入成功 +2025-10-31 13:27:42 - 上传线程结束: /mnt/save/warning/warning_20251031_132738.jpg: 成功! +2025-10-31 13:27:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:43 - 数据库插入成功 +2025-10-31 13:27:43 - 上传线程结束: /mnt/save/warning/warning_20251031_132741.jpg: 成功! +2025-10-31 13:27:43 - 开始上传图片: /mnt/save/warning/warning_20251031_132742.jpg +2025-10-31 13:27:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:43 - 开始上传图片: /mnt/save/warning/warning_20251031_132743.jpg +2025-10-31 13:27:44 - 数据库插入成功 +2025-10-31 13:27:44 - 上传线程结束: /mnt/save/warning/warning_20251031_132740.jpg: 成功! +2025-10-31 13:27:44 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:45 - 数据库插入成功 +2025-10-31 13:27:45 - 上传线程结束: /mnt/save/warning/warning_20251031_132742.jpg: 成功! +2025-10-31 13:27:45 - 开始上传图片: /mnt/save/warning/warning_20251031_132744.jpg +2025-10-31 13:27:45 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:46 - 数据库插入成功 +2025-10-31 13:27:46 - 上传线程结束: /mnt/save/warning/warning_20251031_132743.jpg: 成功! +2025-10-31 13:27:46 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:27:47 - 数据库插入成功 +2025-10-31 13:27:47 - 上传线程结束: /mnt/save/warning/warning_20251031_132744.jpg: 成功! +2025-10-31 13:29:38 - 开始上传图片: /mnt/save/warning/warning_20251031_132938.jpg +2025-10-31 13:29:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:29:40 - 数据库插入成功 +2025-10-31 13:29:40 - 上传线程结束: /mnt/save/warning/warning_20251031_132938.jpg: 成功! +2025-10-31 13:29:40 - 开始上传图片: /mnt/save/warning/warning_20251031_132940.jpg +2025-10-31 13:29:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:29:42 - 数据库插入成功 +2025-10-31 13:29:42 - 上传线程结束: /mnt/save/warning/warning_20251031_132940.jpg: 成功! +2025-10-31 13:29:42 - 开始上传图片: /mnt/save/warning/warning_20251031_132942.jpg +2025-10-31 13:29:44 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:29:44 - 数据库插入成功 +2025-10-31 13:29:44 - 上传线程结束: /mnt/save/warning/warning_20251031_132942.jpg: 成功! +2025-10-31 13:29:44 - 开始上传图片: /mnt/save/warning/warning_20251031_132943.jpg +2025-10-31 13:29:46 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:29:46 - 数据库插入成功 +2025-10-31 13:29:46 - 上传线程结束: /mnt/save/warning/warning_20251031_132943.jpg: 成功! +2025-10-31 13:29:47 - 开始上传图片: /mnt/save/warning/warning_20251031_132946.jpg +2025-10-31 13:29:47 - 开始上传图片: /mnt/save/warning/warning_20251031_132945.jpg +2025-10-31 13:29:48 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:29:48 - 数据库插入成功 +2025-10-31 13:29:48 - 上传线程结束: /mnt/save/warning/warning_20251031_132946.jpg: 成功! +2025-10-31 13:29:49 - 开始上传图片: /mnt/save/warning/warning_20251031_132948.jpg +2025-10-31 13:29:49 - 开始上传图片: /mnt/save/warning/warning_20251031_132947.jpg +2025-10-31 13:29:49 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:29:49 - 数据库插入成功 +2025-10-31 13:29:49 - 上传线程结束: /mnt/save/warning/warning_20251031_132945.jpg: 成功! +2025-10-31 13:29:50 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:29:50 - 数据库插入成功 +2025-10-31 13:29:50 - 上传线程结束: /mnt/save/warning/warning_20251031_132947.jpg: 成功! +2025-10-31 13:29:51 - 开始上传图片: /mnt/save/warning/warning_20251031_132949.jpg +2025-10-31 13:29:51 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:29:51 - 数据库插入成功 +2025-10-31 13:29:51 - 上传线程结束: /mnt/save/warning/warning_20251031_132948.jpg: 成功! +2025-10-31 13:29:52 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:29:52 - 数据库插入成功 +2025-10-31 13:29:52 - 上传线程结束: /mnt/save/warning/warning_20251031_132949.jpg: 成功! +2025-10-31 13:29:57 - 开始上传图片: /mnt/save/warning/warning_20251031_132956.jpg +2025-10-31 13:29:58 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:29:58 - 数据库插入成功 +2025-10-31 13:29:58 - 上传线程结束: /mnt/save/warning/warning_20251031_132956.jpg: 成功! +2025-10-31 13:29:59 - 开始上传图片: /mnt/save/warning/warning_20251031_132957.jpg +2025-10-31 13:29:59 - 开始上传图片: /mnt/save/warning/warning_20251031_132958.jpg +2025-10-31 13:30:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:00 - 数据库插入成功 +2025-10-31 13:30:00 - 上传线程结束: /mnt/save/warning/warning_20251031_132957.jpg: 成功! +2025-10-31 13:30:01 - 开始上传图片: /mnt/save/warning/warning_20251031_133000.jpg +2025-10-31 13:30:01 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:01 - 数据库插入成功 +2025-10-31 13:30:01 - 上传线程结束: /mnt/save/warning/warning_20251031_132958.jpg: 成功! +2025-10-31 13:30:02 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:02 - 数据库插入成功 +2025-10-31 13:30:02 - 上传线程结束: /mnt/save/warning/warning_20251031_133000.jpg: 成功! +2025-10-31 13:30:03 - 开始上传图片: /mnt/save/warning/warning_20251031_133002.jpg +2025-10-31 13:30:03 - 开始上传图片: /mnt/save/warning/warning_20251031_133001.jpg +2025-10-31 13:30:04 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:04 - 数据库插入成功 +2025-10-31 13:30:04 - 上传线程结束: /mnt/save/warning/warning_20251031_133002.jpg: 成功! +2025-10-31 13:30:05 - 开始上传图片: /mnt/save/warning/warning_20251031_133003.jpg +2025-10-31 13:30:05 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:05 - 数据库插入成功 +2025-10-31 13:30:05 - 上传线程结束: /mnt/save/warning/warning_20251031_133001.jpg: 成功! +2025-10-31 13:30:06 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:06 - 数据库插入成功 +2025-10-31 13:30:06 - 上传线程结束: /mnt/save/warning/warning_20251031_133003.jpg: 成功! +2025-10-31 13:30:07 - 开始上传图片: /mnt/save/warning/warning_20251031_133007.jpg +2025-10-31 13:30:07 - 开始上传图片: /mnt/save/warning/warning_20251031_133006.jpg +2025-10-31 13:30:08 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:08 - 数据库插入成功 +2025-10-31 13:30:08 - 上传线程结束: /mnt/save/warning/warning_20251031_133007.jpg: 成功! +2025-10-31 13:30:09 - 开始上传图片: /mnt/save/warning/warning_20251031_133008.jpg +2025-10-31 13:30:09 - 开始上传图片: /mnt/save/warning/warning_20251031_133009.jpg +2025-10-31 13:30:09 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:09 - 数据库插入成功 +2025-10-31 13:30:09 - 上传线程结束: /mnt/save/warning/warning_20251031_133006.jpg: 成功! +2025-10-31 13:30:10 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:10 - 数据库插入成功 +2025-10-31 13:30:10 - 上传线程结束: /mnt/save/warning/warning_20251031_133008.jpg: 成功! +2025-10-31 13:30:11 - 开始上传图片: /mnt/save/warning/warning_20251031_133010.jpg +2025-10-31 13:30:11 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:11 - 数据库插入成功 +2025-10-31 13:30:11 - 上传线程结束: /mnt/save/warning/warning_20251031_133009.jpg: 成功! +2025-10-31 13:30:12 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:12 - 数据库插入成功 +2025-10-31 13:30:12 - 上传线程结束: /mnt/save/warning/warning_20251031_133010.jpg: 成功! +2025-10-31 13:30:13 - 开始上传图片: /mnt/save/warning/warning_20251031_133012.jpg +2025-10-31 13:30:13 - 开始上传图片: /mnt/save/warning/warning_20251031_133011.jpg +2025-10-31 13:30:14 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:14 - 数据库插入成功 +2025-10-31 13:30:14 - 上传线程结束: /mnt/save/warning/warning_20251031_133012.jpg: 成功! +2025-10-31 13:30:15 - 开始上传图片: /mnt/save/warning/warning_20251031_133013.jpg +2025-10-31 13:30:15 - 开始上传图片: /mnt/save/warning/warning_20251031_133014.jpg +2025-10-31 13:30:15 - 开始上传图片: /mnt/save/warning/warning_20251031_133015.jpg +2025-10-31 13:30:15 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:15 - 数据库插入成功 +2025-10-31 13:30:15 - 上传线程结束: /mnt/save/warning/warning_20251031_133011.jpg: 成功! +2025-10-31 13:30:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:16 - 数据库插入成功 +2025-10-31 13:30:16 - 上传线程结束: /mnt/save/warning/warning_20251031_133014.jpg: 成功! +2025-10-31 13:30:17 - 开始上传图片: /mnt/save/warning/warning_20251031_133016.jpg +2025-10-31 13:30:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:17 - 数据库插入成功 +2025-10-31 13:30:17 - 上传线程结束: /mnt/save/warning/warning_20251031_133013.jpg: 成功! +2025-10-31 13:30:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:18 - 数据库插入成功 +2025-10-31 13:30:18 - 上传线程结束: /mnt/save/warning/warning_20251031_133015.jpg: 成功! +2025-10-31 13:30:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:19 - 开始上传图片: /mnt/save/warning/warning_20251031_133017.jpg +2025-10-31 13:30:19 - 开始上传图片: /mnt/save/warning/warning_20251031_133018.jpg +2025-10-31 13:30:19 - 数据库插入成功 +2025-10-31 13:30:19 - 上传线程结束: /mnt/save/warning/warning_20251031_133016.jpg: 成功! +2025-10-31 13:30:20 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:20 - 数据库插入成功 +2025-10-31 13:30:20 - 上传线程结束: /mnt/save/warning/warning_20251031_133017.jpg: 成功! +2025-10-31 13:30:21 - 开始上传图片: /mnt/save/warning/warning_20251031_133020.jpg +2025-10-31 13:30:21 - 开始上传图片: /mnt/save/warning/warning_20251031_133019.jpg +2025-10-31 13:30:21 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:21 - 数据库插入成功 +2025-10-31 13:30:21 - 上传线程结束: /mnt/save/warning/warning_20251031_133018.jpg: 成功! +2025-10-31 13:30:22 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:22 - 数据库插入成功 +2025-10-31 13:30:22 - 上传线程结束: /mnt/save/warning/warning_20251031_133020.jpg: 成功! +2025-10-31 13:30:23 - 开始上传图片: /mnt/save/warning/warning_20251031_133022.jpg +2025-10-31 13:30:23 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:23 - 数据库插入成功 +2025-10-31 13:30:23 - 上传线程结束: /mnt/save/warning/warning_20251031_133019.jpg: 成功! +2025-10-31 13:30:24 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:24 - 数据库插入成功 +2025-10-31 13:30:24 - 上传线程结束: /mnt/save/warning/warning_20251031_133022.jpg: 成功! +2025-10-31 13:30:25 - 开始上传图片: /mnt/save/warning/warning_20251031_133023.jpg +2025-10-31 13:30:26 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:26 - 数据库插入成功 +2025-10-31 13:30:26 - 上传线程结束: /mnt/save/warning/warning_20251031_133023.jpg: 成功! +2025-10-31 13:30:27 - 开始上传图片: /mnt/save/warning/warning_20251031_133025.jpg +2025-10-31 13:30:28 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:28 - 数据库插入成功 +2025-10-31 13:30:28 - 上传线程结束: /mnt/save/warning/warning_20251031_133025.jpg: 成功! +2025-10-31 13:30:29 - 开始上传图片: /mnt/save/warning/warning_20251031_133029.jpg +2025-10-31 13:30:29 - 开始上传图片: /mnt/save/warning/warning_20251031_133028.jpg +2025-10-31 13:30:30 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:30 - 数据库插入成功 +2025-10-31 13:30:30 - 上传线程结束: /mnt/save/warning/warning_20251031_133029.jpg: 成功! +2025-10-31 13:30:31 - 开始上传图片: /mnt/save/warning/warning_20251031_133030.jpg +2025-10-31 13:30:31 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:31 - 开始上传图片: /mnt/save/warning/warning_20251031_133031.jpg +2025-10-31 13:30:31 - 数据库插入成功 +2025-10-31 13:30:31 - 上传线程结束: /mnt/save/warning/warning_20251031_133028.jpg: 成功! +2025-10-31 13:30:32 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:32 - 数据库插入成功 +2025-10-31 13:30:32 - 上传线程结束: /mnt/save/warning/warning_20251031_133030.jpg: 成功! +2025-10-31 13:30:33 - 开始上传图片: /mnt/save/warning/warning_20251031_133033.jpg +2025-10-31 13:30:33 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:33 - 开始上传图片: /mnt/save/warning/warning_20251031_133032.jpg +2025-10-31 13:30:33 - 数据库插入成功 +2025-10-31 13:30:33 - 上传线程结束: /mnt/save/warning/warning_20251031_133031.jpg: 成功! +2025-10-31 13:30:34 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:34 - 数据库插入成功 +2025-10-31 13:30:34 - 上传线程结束: /mnt/save/warning/warning_20251031_133033.jpg: 成功! +2025-10-31 13:30:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:35 - 数据库插入成功 +2025-10-31 13:30:35 - 上传线程结束: /mnt/save/warning/warning_20251031_133032.jpg: 成功! +2025-10-31 13:30:37 - 开始上传图片: /mnt/save/warning/warning_20251031_133035.jpg +2025-10-31 13:30:37 - 开始上传图片: /mnt/save/warning/warning_20251031_133036.jpg +2025-10-31 13:30:37 - 开始上传图片: /mnt/save/warning/warning_20251031_133037.jpg +2025-10-31 13:30:38 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:39 - 数据库插入成功 +2025-10-31 13:30:39 - 上传线程结束: /mnt/save/warning/warning_20251031_133035.jpg: 成功! +2025-10-31 13:30:39 - 开始上传图片: /mnt/save/warning/warning_20251031_133038.jpg +2025-10-31 13:30:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:40 - 数据库插入成功 +2025-10-31 13:30:40 - 上传线程结束: /mnt/save/warning/warning_20251031_133036.jpg: 成功! +2025-10-31 13:30:40 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:40 - 数据库插入成功 +2025-10-31 13:30:40 - 上传线程结束: /mnt/save/warning/warning_20251031_133037.jpg: 成功! +2025-10-31 13:30:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:41 - 数据库插入成功 +2025-10-31 13:30:41 - 上传线程结束: /mnt/save/warning/warning_20251031_133038.jpg: 成功! +2025-10-31 13:30:45 - 开始上传图片: /mnt/save/warning/warning_20251031_133043.jpg +2025-10-31 13:30:46 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:47 - 数据库插入成功 +2025-10-31 13:30:47 - 上传线程结束: /mnt/save/warning/warning_20251031_133043.jpg: 成功! +2025-10-31 13:30:49 - 开始上传图片: /mnt/save/warning/warning_20251031_133049.jpg +2025-10-31 13:30:50 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:51 - 数据库插入成功 +2025-10-31 13:30:51 - 上传线程结束: /mnt/save/warning/warning_20251031_133049.jpg: 成功! +2025-10-31 13:30:51 - 开始上传图片: /mnt/save/warning/warning_20251031_133051.jpg +2025-10-31 13:30:51 - 开始上传图片: /mnt/save/warning/warning_20251031_133050.jpg +2025-10-31 13:30:52 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:53 - 数据库插入成功 +2025-10-31 13:30:53 - 上传线程结束: /mnt/save/warning/warning_20251031_133051.jpg: 成功! +2025-10-31 13:30:53 - 开始上传图片: /mnt/save/warning/warning_20251031_133053.jpg +2025-10-31 13:30:53 - 开始上传图片: /mnt/save/warning/warning_20251031_133052.jpg +2025-10-31 13:30:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:54 - 数据库插入成功 +2025-10-31 13:30:54 - 上传线程结束: /mnt/save/warning/warning_20251031_133050.jpg: 成功! +2025-10-31 13:30:54 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:55 - 数据库插入成功 +2025-10-31 13:30:55 - 上传线程结束: /mnt/save/warning/warning_20251031_133053.jpg: 成功! +2025-10-31 13:30:55 - 开始上传图片: /mnt/save/warning/warning_20251031_133055.jpg +2025-10-31 13:30:55 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:55 - 开始上传图片: /mnt/save/warning/warning_20251031_133054.jpg +2025-10-31 13:30:56 - 数据库插入成功 +2025-10-31 13:30:56 - 上传线程结束: /mnt/save/warning/warning_20251031_133052.jpg: 成功! +2025-10-31 13:30:56 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:57 - 数据库插入成功 +2025-10-31 13:30:57 - 上传线程结束: /mnt/save/warning/warning_20251031_133055.jpg: 成功! +2025-10-31 13:30:57 - 开始上传图片: /mnt/save/warning/warning_20251031_133057.jpg +2025-10-31 13:30:57 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:57 - 开始上传图片: /mnt/save/warning/warning_20251031_133056.jpg +2025-10-31 13:30:58 - 数据库插入成功 +2025-10-31 13:30:58 - 上传线程结束: /mnt/save/warning/warning_20251031_133054.jpg: 成功! +2025-10-31 13:30:58 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:59 - 数据库插入成功 +2025-10-31 13:30:59 - 上传线程结束: /mnt/save/warning/warning_20251031_133057.jpg: 成功! +2025-10-31 13:30:59 - 开始上传图片: /mnt/save/warning/warning_20251031_133059.jpg +2025-10-31 13:30:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:30:59 - 开始上传图片: /mnt/save/warning/warning_20251031_133058.jpg +2025-10-31 13:31:00 - 数据库插入成功 +2025-10-31 13:31:00 - 上传线程结束: /mnt/save/warning/warning_20251031_133056.jpg: 成功! +2025-10-31 13:31:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:01 - 数据库插入成功 +2025-10-31 13:31:01 - 上传线程结束: /mnt/save/warning/warning_20251031_133059.jpg: 成功! +2025-10-31 13:31:01 - 开始上传图片: /mnt/save/warning/warning_20251031_133100.jpg +2025-10-31 13:31:01 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:02 - 数据库插入成功 +2025-10-31 13:31:02 - 上传线程结束: /mnt/save/warning/warning_20251031_133058.jpg: 成功! +2025-10-31 13:31:02 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:03 - 数据库插入成功 +2025-10-31 13:31:03 - 上传线程结束: /mnt/save/warning/warning_20251031_133100.jpg: 成功! +2025-10-31 13:31:03 - 开始上传图片: /mnt/save/warning/warning_20251031_133102.jpg +2025-10-31 13:31:04 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:05 - 数据库插入成功 +2025-10-31 13:31:05 - 上传线程结束: /mnt/save/warning/warning_20251031_133102.jpg: 成功! +2025-10-31 13:31:05 - 开始上传图片: /mnt/save/warning/warning_20251031_133105.jpg +2025-10-31 13:31:06 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:07 - 数据库插入成功 +2025-10-31 13:31:07 - 上传线程结束: /mnt/save/warning/warning_20251031_133105.jpg: 成功! +2025-10-31 13:31:14 - 开始上传图片: /mnt/save/warning/warning_20251031_133112.jpg +2025-10-31 13:31:15 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:15 - 数据库插入成功 +2025-10-31 13:31:15 - 上传线程结束: /mnt/save/warning/warning_20251031_133112.jpg: 成功! +2025-10-31 13:31:16 - 开始上传图片: /mnt/save/warning/warning_20251031_133114.jpg +2025-10-31 13:31:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:17 - 数据库插入成功 +2025-10-31 13:31:17 - 上传线程结束: /mnt/save/warning/warning_20251031_133114.jpg: 成功! +2025-10-31 13:31:18 - 开始上传图片: /mnt/save/warning/warning_20251031_133117.jpg +2025-10-31 13:31:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:19 - 数据库插入成功 +2025-10-31 13:31:19 - 上传线程结束: /mnt/save/warning/warning_20251031_133117.jpg: 成功! +2025-10-31 13:31:20 - 开始上传图片: /mnt/save/warning/warning_20251031_133119.jpg +2025-10-31 13:31:20 - 开始上传图片: /mnt/save/warning/warning_20251031_133118.jpg +2025-10-31 13:31:21 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:21 - 数据库插入成功 +2025-10-31 13:31:21 - 上传线程结束: /mnt/save/warning/warning_20251031_133119.jpg: 成功! +2025-10-31 13:31:22 - 开始上传图片: /mnt/save/warning/warning_20251031_133122.jpg +2025-10-31 13:31:22 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:22 - 开始上传图片: /mnt/save/warning/warning_20251031_133121.jpg +2025-10-31 13:31:22 - 开始上传图片: /mnt/save/warning/warning_20251031_133120.jpg +2025-10-31 13:31:22 - 数据库插入成功 +2025-10-31 13:31:22 - 上传线程结束: /mnt/save/warning/warning_20251031_133118.jpg: 成功! +2025-10-31 13:31:23 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:23 - 数据库插入成功 +2025-10-31 13:31:23 - 上传线程结束: /mnt/save/warning/warning_20251031_133122.jpg: 成功! +2025-10-31 13:31:24 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:24 - 数据库插入成功 +2025-10-31 13:31:24 - 上传线程结束: /mnt/save/warning/warning_20251031_133121.jpg: 成功! +2025-10-31 13:31:25 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:25 - 数据库插入成功 +2025-10-31 13:31:25 - 上传线程结束: /mnt/save/warning/warning_20251031_133120.jpg: 成功! +2025-10-31 13:31:26 - 开始上传图片: /mnt/save/warning/warning_20251031_133124.jpg +2025-10-31 13:31:26 - 开始上传图片: /mnt/save/warning/warning_20251031_133125.jpg +2025-10-31 13:31:27 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:27 - 数据库插入成功 +2025-10-31 13:31:27 - 上传线程结束: /mnt/save/warning/warning_20251031_133124.jpg: 成功! +2025-10-31 13:31:28 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:28 - 开始上传图片: /mnt/save/warning/warning_20251031_133126.jpg +2025-10-31 13:31:28 - 数据库插入成功 +2025-10-31 13:31:28 - 上传线程结束: /mnt/save/warning/warning_20251031_133125.jpg: 成功! +2025-10-31 13:31:29 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:29 - 数据库插入成功 +2025-10-31 13:31:29 - 上传线程结束: /mnt/save/warning/warning_20251031_133126.jpg: 成功! +2025-10-31 13:31:30 - 开始上传图片: /mnt/save/warning/warning_20251031_133129.jpg +2025-10-31 13:31:31 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:31 - 数据库插入成功 +2025-10-31 13:31:31 - 上传线程结束: /mnt/save/warning/warning_20251031_133129.jpg: 成功! +2025-10-31 13:31:32 - 开始上传图片: /mnt/save/warning/warning_20251031_133131.jpg +2025-10-31 13:31:33 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:33 - 数据库插入成功 +2025-10-31 13:31:33 - 上传线程结束: /mnt/save/warning/warning_20251031_133131.jpg: 成功! +2025-10-31 13:31:34 - 开始上传图片: /mnt/save/warning/warning_20251031_133132.jpg +2025-10-31 13:31:34 - 开始上传图片: /mnt/save/warning/warning_20251031_133133.jpg +2025-10-31 13:31:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:35 - 数据库插入成功 +2025-10-31 13:31:35 - 上传线程结束: /mnt/save/warning/warning_20251031_133133.jpg: 成功! +2025-10-31 13:31:36 - 开始上传图片: /mnt/save/warning/warning_20251031_133135.jpg +2025-10-31 13:31:36 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:36 - 开始上传图片: /mnt/save/warning/warning_20251031_133136.jpg +2025-10-31 13:31:36 - 数据库插入成功 +2025-10-31 13:31:36 - 上传线程结束: /mnt/save/warning/warning_20251031_133132.jpg: 成功! +2025-10-31 13:31:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:37 - 数据库插入成功 +2025-10-31 13:31:37 - 上传线程结束: /mnt/save/warning/warning_20251031_133135.jpg: 成功! +2025-10-31 13:31:38 - 开始上传图片: /mnt/save/warning/warning_20251031_133137.jpg +2025-10-31 13:31:38 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:38 - 数据库插入成功 +2025-10-31 13:31:38 - 上传线程结束: /mnt/save/warning/warning_20251031_133136.jpg: 成功! +2025-10-31 13:31:39 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:39 - 数据库插入成功 +2025-10-31 13:31:39 - 上传线程结束: /mnt/save/warning/warning_20251031_133137.jpg: 成功! +2025-10-31 13:31:40 - 开始上传图片: /mnt/save/warning/warning_20251031_133138.jpg +2025-10-31 13:31:40 - 开始上传图片: /mnt/save/warning/warning_20251031_133139.jpg +2025-10-31 13:31:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:41 - 数据库插入成功 +2025-10-31 13:31:41 - 上传线程结束: /mnt/save/warning/warning_20251031_133138.jpg: 成功! +2025-10-31 13:31:42 - 开始上传图片: /mnt/save/warning/warning_20251031_133140.jpg +2025-10-31 13:31:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:42 - 数据库插入成功 +2025-10-31 13:31:42 - 上传线程结束: /mnt/save/warning/warning_20251031_133139.jpg: 成功! +2025-10-31 13:31:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:44 - 数据库插入成功 +2025-10-31 13:31:44 - 上传线程结束: /mnt/save/warning/warning_20251031_133140.jpg: 成功! +2025-10-31 13:31:48 - 开始上传图片: /mnt/save/warning/warning_20251031_133147.jpg +2025-10-31 13:31:48 - 开始上传图片: /mnt/save/warning/warning_20251031_133146.jpg +2025-10-31 13:31:49 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:49 - 数据库插入成功 +2025-10-31 13:31:49 - 上传线程结束: /mnt/save/warning/warning_20251031_133147.jpg: 成功! +2025-10-31 13:31:50 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:50 - 开始上传图片: /mnt/save/warning/warning_20251031_133149.jpg +2025-10-31 13:31:50 - 数据库插入成功 +2025-10-31 13:31:50 - 上传线程结束: /mnt/save/warning/warning_20251031_133146.jpg: 成功! +2025-10-31 13:31:51 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:51 - 数据库插入成功 +2025-10-31 13:31:51 - 上传线程结束: /mnt/save/warning/warning_20251031_133149.jpg: 成功! +2025-10-31 13:31:52 - 开始上传图片: /mnt/save/warning/warning_20251031_133151.jpg +2025-10-31 13:31:53 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:53 - 数据库插入成功 +2025-10-31 13:31:53 - 上传线程结束: /mnt/save/warning/warning_20251031_133151.jpg: 成功! +2025-10-31 13:31:54 - 开始上传图片: /mnt/save/warning/warning_20251031_133154.jpg +2025-10-31 13:31:54 - 开始上传图片: /mnt/save/warning/warning_20251031_133153.jpg +2025-10-31 13:31:55 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:55 - 数据库插入成功 +2025-10-31 13:31:55 - 上传线程结束: /mnt/save/warning/warning_20251031_133154.jpg: 成功! +2025-10-31 13:31:56 - 开始上传图片: /mnt/save/warning/warning_20251031_133155.jpg +2025-10-31 13:31:56 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:56 - 数据库插入成功 +2025-10-31 13:31:56 - 上传线程结束: /mnt/save/warning/warning_20251031_133153.jpg: 成功! +2025-10-31 13:31:57 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:31:57 - 数据库插入成功 +2025-10-31 13:31:57 - 上传线程结束: /mnt/save/warning/warning_20251031_133155.jpg: 成功! +2025-10-31 13:31:58 - 开始上传图片: /mnt/save/warning/warning_20251031_133157.jpg +2025-10-31 13:31:58 - 开始上传图片: /mnt/save/warning/warning_20251031_133158.jpg +2025-10-31 13:31:59 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:00 - 数据库插入成功 +2025-10-31 13:32:00 - 上传线程结束: /mnt/save/warning/warning_20251031_133158.jpg: 成功! +2025-10-31 13:32:00 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:01 - 数据库插入成功 +2025-10-31 13:32:01 - 上传线程结束: /mnt/save/warning/warning_20251031_133157.jpg: 成功! +2025-10-31 13:32:02 - 开始上传图片: /mnt/save/warning/warning_20251031_133201.jpg +2025-10-31 13:32:03 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:04 - 数据库插入成功 +2025-10-31 13:32:04 - 上传线程结束: /mnt/save/warning/warning_20251031_133201.jpg: 成功! +2025-10-31 13:32:04 - 开始上传图片: /mnt/save/warning/warning_20251031_133203.jpg +2025-10-31 13:32:04 - 开始上传图片: /mnt/save/warning/warning_20251031_133202.jpg +2025-10-31 13:32:05 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:06 - 数据库插入成功 +2025-10-31 13:32:06 - 上传线程结束: /mnt/save/warning/warning_20251031_133203.jpg: 成功! +2025-10-31 13:32:06 - 开始上传图片: /mnt/save/warning/warning_20251031_133205.jpg +2025-10-31 13:32:06 - 开始上传图片: /mnt/save/warning/warning_20251031_133204.jpg +2025-10-31 13:32:06 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:07 - 数据库插入成功 +2025-10-31 13:32:07 - 上传线程结束: /mnt/save/warning/warning_20251031_133202.jpg: 成功! +2025-10-31 13:32:07 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:08 - 数据库插入成功 +2025-10-31 13:32:08 - 上传线程结束: /mnt/save/warning/warning_20251031_133204.jpg: 成功! +2025-10-31 13:32:08 - 开始上传图片: /mnt/save/warning/warning_20251031_133206.jpg +2025-10-31 13:32:08 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:08 - 开始上传图片: /mnt/save/warning/warning_20251031_133207.jpg +2025-10-31 13:32:09 - 数据库插入成功 +2025-10-31 13:32:09 - 上传线程结束: /mnt/save/warning/warning_20251031_133205.jpg: 成功! +2025-10-31 13:32:09 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:10 - 数据库插入成功 +2025-10-31 13:32:10 - 上传线程结束: /mnt/save/warning/warning_20251031_133206.jpg: 成功! +2025-10-31 13:32:10 - 开始上传图片: /mnt/save/warning/warning_20251031_133209.jpg +2025-10-31 13:32:10 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:11 - 数据库插入成功 +2025-10-31 13:32:11 - 上传线程结束: /mnt/save/warning/warning_20251031_133207.jpg: 成功! +2025-10-31 13:32:11 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:12 - 数据库插入成功 +2025-10-31 13:32:12 - 上传线程结束: /mnt/save/warning/warning_20251031_133209.jpg: 成功! +2025-10-31 13:32:12 - 开始上传图片: /mnt/save/warning/warning_20251031_133210.jpg +2025-10-31 13:32:13 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:14 - 数据库插入成功 +2025-10-31 13:32:14 - 上传线程结束: /mnt/save/warning/warning_20251031_133210.jpg: 成功! +2025-10-31 13:32:14 - 开始上传图片: /mnt/save/warning/warning_20251031_133213.jpg +2025-10-31 13:32:14 - 开始上传图片: /mnt/save/warning/warning_20251031_133212.jpg +2025-10-31 13:32:14 - 开始上传图片: /mnt/save/warning/warning_20251031_133214.jpg +2025-10-31 13:32:15 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:16 - 数据库插入成功 +2025-10-31 13:32:16 - 上传线程结束: /mnt/save/warning/warning_20251031_133212.jpg: 成功! +2025-10-31 13:32:16 - 开始上传图片: /mnt/save/warning/warning_20251031_133215.jpg +2025-10-31 13:32:16 - 开始上传图片: /mnt/save/warning/warning_20251031_133216.jpg +2025-10-31 13:32:16 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:17 - 数据库插入成功 +2025-10-31 13:32:17 - 上传线程结束: /mnt/save/warning/warning_20251031_133213.jpg: 成功! +2025-10-31 13:32:17 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:18 - 数据库插入成功 +2025-10-31 13:32:18 - 上传线程结束: /mnt/save/warning/warning_20251031_133214.jpg: 成功! +2025-10-31 13:32:18 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:18 - 开始上传图片: /mnt/save/warning/warning_20251031_133217.jpg +2025-10-31 13:32:18 - 开始上传图片: /mnt/save/warning/warning_20251031_133218.jpg +2025-10-31 13:32:19 - 数据库插入成功 +2025-10-31 13:32:19 - 上传线程结束: /mnt/save/warning/warning_20251031_133215.jpg: 成功! +2025-10-31 13:32:19 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:20 - 数据库插入成功 +2025-10-31 13:32:20 - 上传线程结束: /mnt/save/warning/warning_20251031_133216.jpg: 成功! +2025-10-31 13:32:20 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:20 - 开始上传图片: /mnt/save/warning/warning_20251031_133220.jpg +2025-10-31 13:32:20 - 开始上传图片: /mnt/save/warning/warning_20251031_133219.jpg +2025-10-31 13:32:21 - 数据库插入成功 +2025-10-31 13:32:21 - 上传线程结束: /mnt/save/warning/warning_20251031_133217.jpg: 成功! +2025-10-31 13:32:21 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:22 - 数据库插入成功 +2025-10-31 13:32:22 - 上传线程结束: /mnt/save/warning/warning_20251031_133218.jpg: 成功! +2025-10-31 13:32:22 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:22 - 开始上传图片: /mnt/save/warning/warning_20251031_133221.jpg +2025-10-31 13:32:22 - 开始上传图片: /mnt/save/warning/warning_20251031_133222.jpg +2025-10-31 13:32:23 - 数据库插入成功 +2025-10-31 13:32:23 - 上传线程结束: /mnt/save/warning/warning_20251031_133220.jpg: 成功! +2025-10-31 13:32:23 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:24 - 数据库插入成功 +2025-10-31 13:32:24 - 上传线程结束: /mnt/save/warning/warning_20251031_133219.jpg: 成功! +2025-10-31 13:32:24 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:24 - 开始上传图片: /mnt/save/warning/warning_20251031_133224.jpg +2025-10-31 13:32:24 - 开始上传图片: /mnt/save/warning/warning_20251031_133223.jpg +2025-10-31 13:32:25 - 数据库插入成功 +2025-10-31 13:32:25 - 上传线程结束: /mnt/save/warning/warning_20251031_133221.jpg: 成功! +2025-10-31 13:32:25 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:26 - 数据库插入成功 +2025-10-31 13:32:26 - 上传线程结束: /mnt/save/warning/warning_20251031_133222.jpg: 成功! +2025-10-31 13:32:26 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:26 - 开始上传图片: /mnt/save/warning/warning_20251031_133225.jpg +2025-10-31 13:32:26 - 开始上传图片: /mnt/save/warning/warning_20251031_133226.jpg +2025-10-31 13:32:27 - 数据库插入成功 +2025-10-31 13:32:27 - 上传线程结束: /mnt/save/warning/warning_20251031_133224.jpg: 成功! +2025-10-31 13:32:27 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:28 - 数据库插入成功 +2025-10-31 13:32:28 - 上传线程结束: /mnt/save/warning/warning_20251031_133223.jpg: 成功! +2025-10-31 13:32:28 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:28 - 开始上传图片: /mnt/save/warning/warning_20251031_133227.jpg +2025-10-31 13:32:29 - 数据库插入成功 +2025-10-31 13:32:29 - 上传线程结束: /mnt/save/warning/warning_20251031_133225.jpg: 成功! +2025-10-31 13:32:29 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:30 - 数据库插入成功 +2025-10-31 13:32:30 - 上传线程结束: /mnt/save/warning/warning_20251031_133226.jpg: 成功! +2025-10-31 13:32:30 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:30 - 开始上传图片: /mnt/save/warning/warning_20251031_133230.jpg +2025-10-31 13:32:31 - 数据库插入成功 +2025-10-31 13:32:31 - 上传线程结束: /mnt/save/warning/warning_20251031_133227.jpg: 成功! +2025-10-31 13:32:31 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:32 - 数据库插入成功 +2025-10-31 13:32:32 - 上传线程结束: /mnt/save/warning/warning_20251031_133230.jpg: 成功! +2025-10-31 13:32:32 - 开始上传图片: /mnt/save/warning/warning_20251031_133232.jpg +2025-10-31 13:32:32 - 开始上传图片: /mnt/save/warning/warning_20251031_133231.jpg +2025-10-31 13:32:34 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:34 - 数据库插入成功 +2025-10-31 13:32:34 - 上传线程结束: /mnt/save/warning/warning_20251031_133231.jpg: 成功! +2025-10-31 13:32:34 - 开始上传图片: /mnt/save/warning/warning_20251031_133233.jpg +2025-10-31 13:32:35 - 开始上传图片: /mnt/save/warning/warning_20251031_133234.jpg +2025-10-31 13:32:35 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:35 - 数据库插入成功 +2025-10-31 13:32:35 - 上传线程结束: /mnt/save/warning/warning_20251031_133232.jpg: 成功! +2025-10-31 13:32:36 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:36 - 数据库插入成功 +2025-10-31 13:32:36 - 上传线程结束: /mnt/save/warning/warning_20251031_133233.jpg: 成功! +2025-10-31 13:32:37 - 开始上传图片: /mnt/save/warning/warning_20251031_133235.jpg +2025-10-31 13:32:37 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:37 - 数据库插入成功 +2025-10-31 13:32:37 - 上传线程结束: /mnt/save/warning/warning_20251031_133234.jpg: 成功! +2025-10-31 13:32:38 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:38 - 数据库插入成功 +2025-10-31 13:32:38 - 上传线程结束: /mnt/save/warning/warning_20251031_133235.jpg: 成功! +2025-10-31 13:32:39 - 开始上传图片: /mnt/save/warning/warning_20251031_133238.jpg +2025-10-31 13:32:39 - 开始上传图片: /mnt/save/warning/warning_20251031_133237.jpg +2025-10-31 13:32:40 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:40 - 数据库插入成功 +2025-10-31 13:32:40 - 上传线程结束: /mnt/save/warning/warning_20251031_133238.jpg: 成功! +2025-10-31 13:32:41 - 开始上传图片: /mnt/save/warning/warning_20251031_133239.jpg +2025-10-31 13:32:41 - 开始上传图片: /mnt/save/warning/warning_20251031_133240.jpg +2025-10-31 13:32:41 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:41 - 数据库插入成功 +2025-10-31 13:32:41 - 上传线程结束: /mnt/save/warning/warning_20251031_133237.jpg: 成功! +2025-10-31 13:32:42 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:42 - 数据库插入成功 +2025-10-31 13:32:42 - 上传线程结束: /mnt/save/warning/warning_20251031_133239.jpg: 成功! +2025-10-31 13:32:43 - 开始上传图片: /mnt/save/warning/warning_20251031_133242.jpg +2025-10-31 13:32:43 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:43 - 开始上传图片: /mnt/save/warning/warning_20251031_133241.jpg +2025-10-31 13:32:43 - 数据库插入成功 +2025-10-31 13:32:43 - 上传线程结束: /mnt/save/warning/warning_20251031_133240.jpg: 成功! +2025-10-31 13:32:44 - 使用经纬度上传: lon=1201, lat=3129 +2025-10-31 13:32:44 - 数据库插入成功 +2025-10-31 13:32:44 - 上传线程结束: /mnt/save/warning/warning_20251031_133242.jpg: 成功! diff --git a/softWareInit/bin/wifi b/softWareInit/bin/wifi index 6513404..bc79feb 100755 Binary files a/softWareInit/bin/wifi and b/softWareInit/bin/wifi differ