基于微服务的司机注册与实名认证(活体检测)

3.2 项目技术栈分析

使用了哪些云服务:

        对象存储服务 COS  —— 存储司机实名认证的身份证和驾驶证照片

        人脸识别 AiFace  —— 每天司机接单前的身份核实,并且具备静态活体检测功能

        人员库管理 face-lib  —— 云端存储司机注册时候的人脸模型,用于身份比对使用

        数据万象 CI  —— 用于监控大家录音文本内容,判断是否包含暴力和色情

        OCR 证件识别插件  —— 用于 OCR,识别和扫描身份证、驾驶证的信息

        微信同声传译插件  —— 把文字合成语音,播报订单。把录音转换成文本,用于安全监控

        路线规划插件  —— 用于规划司机下班回家的线路,或小程序订单显示的路线

        地图选点插件  —— 用于小程序上面地图选点操作

        腾讯位置服务  —— 路线规划,定位导航,里程和时间预估

技术栈分析:

        QLExpress  规则引擎,计算预估费用,取消费用等

        Quartz  定时器,销毁过期未接单订单,定时自动分账等等

        Phoenix  HBase数据存储

        GEO  GPS分区定位计算

        SaToken  认证与授权框架

3.3 运行华夏代驾初始化项目

        1. 修改common 项目中的 application-common.yml 文件中,小程序id secret 等。

        2. 启动 TM 节点。

        3. 启动其他子程序。

        4. 子系统运行不起来,检查 端口号冲突、配置信息错误、Java环境错误。

3.4 例子代码

SELECT CAST( id AS CHAR ) AS id FROM tb_driver
@Slf4j //日志注解
HashMap tempParam = new HashMap(){{ put("openId", openId) }}
//司机需提交的注册信息,建一个 Form 类 作为类型,对请求参数进行校验和判断

//xxServiceImpl 层加事务
//在 SaToken 上面执行登录,实际上就是缓存 userId,然后才有资格拿到令牌
StpUtil.login( driverId )

//生成 Token 令牌字符串(已加密)
String token = StpUtil.getTokenInfo().getTokenValue()
return R.ok().put("token", token)

//验证登录注解
@SaCheckLogin
long userId = Convert.toLong(r.get("userId"))
int  xx     = Convert.toInt()

3.9 例子代码

//swagger代码:
@Tag(name="CosController", description="对象存储web接口")
@Operation(summary="上传文件")
@Schema(description="xxx")
//Controller注解:
@Valid
@RequestBody
@Params("xx")
//微信公众平台内添加 OCR插件:设置 -> 第三方设置 -> 插件管理
//微信同声传译、腾讯位置服务 城市选择器、地图选点、路线规划

//manifest.json文件:
"plugins": {
    "ocr-plugin": {
        "version": "3.0.6",
        "provider": "wx4418e3e031e551be"
    }
    "其他插件也如此"
}
//有Form类的概念,封装网络请求参数,注解如下:
@Data
@NotNull(message="xxx")
@Min(value=1, message="xxx")
@Pattern(regexp="xxx", message="xxx")
@NotBlank(message="xxx")
@Range(min=1, max=12, message="xxx")
@NotEmpty(message="xxx")

 3.15 开通活体检测,甄别真实注册司机 (一)

        1. 开通人脸识别:https://cloud.tencent.com/product/facerecognition

        2. 新建人员库

        3. 向人员库上传司机面部照片:https://cloud.tencent.com/document/api/867/45014

        4. 在 common 子系统中 application-common.yml 文件中,添加信息

tencent:
    cloud:
        ...
        ...
        face:
            groupName: hxds
            region: ap-beijing


//使用时
@Value("${tencent.cloud.face.region}")

        5. 编码

3.17 例子代码

//SQL语句中:MySQL数字类型查询速度比字符串类型速度快
//返回前端不能是 bigint 类型,要是 char 类型
CAST( id AS CHAR ) AS id

//SQL语句
CAST( w.balance AS CHAR ) AS balance

//汇总函数
COUNT(id) AS orders

//不能返回空
IFNULL( SUM(real_fee), 0) AS income

//浮点类型数据库数据 返回给前端会丢失精度,转成字符类型好点
IFNULL( SUM(TIMESTAMPDIFF( HOUR, end_time, start_time)), 0) AS xxx

timestampdiff(YEAR, drcard_issue_date, NOW()) AS `year`

DATE_FORMAT( create_time, '%Y-%m-%d') AS createTime
<if test="status != null">
    AND `status` = #{status}
</if>
LIMIT #{start}, #{length}

HashMap result = driverDao.login(openId)
...    ...
result.replace("archive", archive)
long driverId = MapUtil.getLong(map, "id");
StpUtil.login(driverId);
String token = StpUtil.getTokenInfo().getTokenValue();
byte realAuth = Byte.parseByte(MapUtil.getStr(map, "realAuth"));
JSONObject summary = JSONUtil.parseObj(MapUtil.getStr(result, "xx"));
HashMap map = (HashMap) r.get("result");
HashMap map = JSONUtil.parseObj(settings).toBean(HashMap.class)
ArrayList<HashMap> list = null
list = new ArrayList<>()
//把前端传来的Form转成Map,Map传给Dao层
Map param = BeanUtil.beanToMap(form);

//讲师自己封装了一个PageUtils
//经过Http后,要这样
HashMap map = (HashMap) r.get("result");
PageUtils pageUtils = BeanUtil.toBean(map, PageUtils.class)
@SaCheckPermission( value={"ROOT", "DRIVER:SELECT"}, mode=SaMode.OR)
//gateway子服务application.yml文件中
routes:
    -id: bff-driver
    uri: lb://bff-driver
    predicates:
        -Path=/hxds-driver/**
    filters:
        -StripPrefix=1
    -id: hxds-mis-api
    uri: lb://hxds-mis-api
    predicates:
        -Path=/hxds-mis-api/**
    filters:
        -StripPrefix=1

腾讯云对象存储服务有一个“生成预签名URL”功能,可以对云端文件生成临时外网URL地址,并且含有签名字符串,预签名URL的文档:https://cloud.tencent.com/document/product/436/35217。签名有过期时间。

//时间定为 5分钟后
Date expiration = DateUtil.offsetMinute( new Date(), 5)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个基于人脸动作捕捉的活体检测模型代码的示例,使用了Python和OpenCV库: ```python import cv2 import numpy as np # 定义全局变量 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 人脸检测器 eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') # 眼睛检测器 cap = cv2.VideoCapture(0) # 打开摄像头 frames = [] # 存储视频帧 motion_threshold = 20000 # 动作阈值 # 采集视频帧 while True: ret, frame = cap.read() if not ret: break gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将帧转换为灰度图像 faces = face_cascade.detectMultiScale(gray, 1.3, 5) # 检测人脸 for (x,y,w,h) in faces: roi_gray = gray[y:y+h, x:x+w] # 提取人脸区域 roi_color = frame[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) # 检测眼睛 for (ex,ey,ew,eh) in eyes: cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) cv2.imshow('frame',frame) if cv2.waitKey(1) & 0xFF == ord('q'): # 等待按下 'q' 键退出程序 break frames.append(gray) # 存储灰度图像帧 # 计算运动量 motion = 0 for i in range(len(frames)-1): frame1 = frames[i] frame2 = frames[i+1] diff = cv2.absdiff(frame1, frame2) # 计算帧间差异 motion += np.sum(diff > motion_threshold) # 计算运动像素数量 # 活体检测 if motion > 1000: # 如果运动量超过阈值,则判断为假人脸 print("Fake Face Detected!") else: print("Real Face Detected!") # 释放资源 cap.release() cv2.destroyAllWindows() ``` 该代码通过使用OpenCV库中的Haar级联分类器来检测人脸和眼睛,并计算相邻帧之间的差异来计算运动量。最后,如果运动量超过阈值,则判断为假人脸,否则判断为真人脸。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chengbo_eva

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值