Ver código fonte

优化相机服务代码

niujiuru 3 semanas atrás
pai
commit
9664ae0c01

+ 2 - 1
camera-capture.service/main.go

@@ -75,6 +75,7 @@ func (p *program) Start(s service.Service) error {
 	_saveLogConf := servicelib.SaveLogConf
 	methods["basic.saveLogConf"] = _saveLogConf // 保存日志设置
 	//////////////////////////网口相机//////////////////////////
+	methods["core.getGigeCameraPower"] = getGigeCameraPower
 	methods["core.setGigeCameraPower"] = setGigeCameraPower
 	methods["core.checkGigeCamera"] = checkGigeCamera
 	//////////////////////////相机数量//////////////////////////
@@ -135,7 +136,7 @@ func (p *program) Stop(s service.Service) error {
 }
 
 func main() {
-	baseapp.SetOptDirs(true, true, false, false)
+	baseapp.SetOptDirs(true, false, false, true)
 	baseapp.InitPath()
 
 	svcFlag := flag.String("service", "", "Control the yfkj-camera-capture service.")

+ 28 - 5
camera-capture.service/rpc_handler.go

@@ -5,13 +5,26 @@ import (
 	"encoding/json"
 	"strconv"
 	"strings"
+	"time"
 
+	"hnyfkj.com.cn/rtu/linux/baseapp"
 	"hnyfkj.com.cn/rtu/linux/camera"
 	"hnyfkj.com.cn/rtu/linux/dh_takephoto"
 	"hnyfkj.com.cn/rtu/linux/hk_takephoto"
 	"hnyfkj.com.cn/rtu/linux/utils/jsonrpc2"
 )
 
+func getGigeCameraPower(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
+	on, err := camera.GetGigeCameraPowerCtrl()
+	if err != nil {
+		return jsonrpc2.BuildError(req, jsonrpc2.ErrInternal, err.Error())
+	}
+
+	return jsonrpc2.BuildResponse(req, map[string]string{
+		"enable": strconv.FormatBool(on),
+	}, nil)
+}
+
 func setGigeCameraPower(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
 	var params map[string]string
 	if err := json.Unmarshal(req.Params, &params); err != nil {
@@ -153,17 +166,27 @@ func takePhoto(ctx context.Context, req *jsonrpc2.Request) *jsonrpc2.Response {
 		timeout = 300
 	}
 
+	baseapp.Logger.Infof("开始拍照, 请稍微...")
+	var resp *jsonrpc2.Response
+
+	start := time.Now()
 	imgMark, err := camera.TakePhoto(
 		camera.IMG_TYPE_JPG,
 		outFilename,
 		timeout,
 	)
+	elapsed := time.Since(start).Milliseconds()
+
 	if err != nil {
-		return jsonrpc2.BuildError(req, -32001, err.Error())
+		resp = jsonrpc2.BuildError(req, -32001, err.Error())
+		baseapp.Logger.Errorf("拍照时发生错误: %v, 用时: %dms, 请修复所有问题后重试!!", err, elapsed)
+	} else {
+		resp = jsonrpc2.BuildResponse(req, map[string]any{
+			"status": "success",
+			"mark":   imgMark,
+		}, nil)
+		baseapp.Logger.Infof("拍照结束, 输出: \"%s\", 用时: %dms, 拍照信息: %+v", outFilename, elapsed, imgMark)
 	}
 
-	return jsonrpc2.BuildResponse(req, map[string]interface{}{
-		"status": "success",
-		"mark":   imgMark,
-	}, nil)
+	return resp
 }

+ 9 - 5
camera-capture.service/test.txt

@@ -15,20 +15,24 @@ curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d
 // 保存日志设置
 curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"basic.saveLogConf","params":{},"id":5}'
 
+// 获取网口相机
+// 返回: "enable'为"true"时表示已供电, "false"时表示未供电
+curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"core.getGigeCameraPower","params":{},"id":6}'
+
 // 打开网口相机
 // 参数: "true"-网口相机供电; "false"-网口相机断电
-curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"core.setGigeCameraPower","params":{"enable":"true"},"id":6}'
+curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"core.setGigeCameraPower","params":{"enable":"true"},"id":7}'
 
 // PING网口相机
 // 参数:目前固定网口相机的IP地址: 192.168.100.100/24
-curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"core.checkGigeCamera","params":{"ip":"192.168.100.100", "prefix": "24"},"id":7}'
+curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"core.checkGigeCamera","params":{"ip":"192.168.100.100", "prefix": "24"},"id":8}'
 
 // 得到相机数量
 // 参数: 海康-"hk"; 大华-"dh"; 所有-"all"
-curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"core.getSupportedCameraCount","params":{"type":"all"},"id":8}'
+curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"core.getSupportedCameraCount","params":{"type":"all"},"id":9}'
 
 // 相机处于自动曝光模式时, 设置是否等待曝光稳定后再拍照, 参数: waitAE: 0=不等待, 1=等待(默认)
-curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"core.setWaitAEDoneForTakePhoto","params":{"waitAE":"1"},"id":9}'
+curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"core.setWaitAEDoneForTakePhoto","params":{"waitAE":"1"},"id":10}'
 
 // 请求相机拍照
-curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"core.takePhoto","params":{"format":"jpg", "outFilename":"./test.jpg", "timeoutMs":"300"},"id":10}'
+curl -s -X POST http://127.0.0.1:7003/rpc -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"core.takePhoto","params":{"format":"jpg", "outFilename":"/tmp/test.jpg", "timeoutMs":"300"},"id":11}'

+ 1 - 0
config/yfkj-camera-capture.service

@@ -6,6 +6,7 @@ Wants=systemd-udevd.service
 [Service]
 Environment="PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"
 Environment="LD_LIBRARY_PATH=/opt/yfkj/camera-capture.service/lib:/opt/yfkj/camera-capture.service/lib/GenICam/bin"
+WorkingDirectory=/opt/yfkj/camera-capture.service/cam_img
 ExecStart=/opt/yfkj/camera-capture.service/camera-capture
 Restart=always
 RestartSec=30

+ 1 - 3
web-ui.service/web/pages/page5.html

@@ -34,7 +34,7 @@
 
       <div class="status-bar">
         <div class="status-item">
-          <span class="label">网口相机</span>
+          <span class="label">网口相机(固定IP地址)</span>
           <span class="value">192.168.100.100/24</span>
         </div>
         <div class="status-item">
@@ -50,8 +50,6 @@
           <button class="btn" title="打开网口相机供电" onclick="cameraPower('true')">上电</button>
           <span style="margin:0 1px;"></span>
           <button class="btn" title="关闭网口相机供电" onclick="cameraPower('false')">断电</button>
-          <span style="margin:0 1px;"></span>
-          <button class="btn" title="检测网口相机是否连通(ping测试)" onclick="cameraPing()">检测</button>
         </div>
       </div>
     </div>