# API_final **Repository Path**: yang_pei_jun/api_final ## Basic Information - **Project Name**: API_final - **Description**: API期末项目-卡点APP - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-22 - **Last Updated**: 2021-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

API期末项目——卡点-旅行打卡分享平台

--- | 项目名称 | 卡点 | | ---- | ---- | | 发布日期 | 2021-01-24 | | 项目介绍 |一款有趣的旅行打卡分享平台 | | 项目版本 | 1.0 | | 项目主人 |杨培君 | ## 一、MVP加/价值主张宣言 ### MVP 1—产品名称 ##### 卡点:记录你的每一个打卡瞬间 ### MVP 2—问题描述及解决方案 #### 1.问题描述 随着经济的快速发展,人们的生活水平也在日益提高,对美好的生活需求也在日益提高,越来越多的人前往世界各地进行旅游。然而,有一些用户想要找到好玩的地方,需要从各大app分散搜索,同时需要便捷的操作制定旅行计划。 #### 2.解决方案 因此,一款以打卡作为基础,记录旅程,分享物料的旅行打卡APP更能满足当代人的旅行需求。通过华为云的推荐系统RES、百度AI的语音识别、文本审核(注册信息筛查、评论)、高德API功能对产品进行优化,致力于为客户提供一个有趣味性的旅行打卡分享平台。 ## 二、问题需求 ### 1. 使用情境与[用户画象](https://baike.baidu.com/item/%E7%94%A8%E6%88%B7%E7%94%BB%E5%83%8F/22085710?fr=aladdin) ![用户画像](https://s3.ax1x.com/2021/01/22/sICGAU.jpg) ### 2. 需求列表 用户需求 | 智能加值 | 使用API | 优先级 | ---- | ---- | ---- | ---- 快速提供推荐旅程打卡点 | 通过推荐系统对用户信息、喜好进行推送 | 推荐系统RES | 一(最重要) 找到附近的旅行打卡点并进行定位 | 通过高德API的poi搜索快速找到附近的打卡点 | 搜索POI | 二(重要) 快速语音输入搜索打卡点 | 通过语音识别反馈文本信息 | 实时语音识别API | 三(次重要) 用户注册 | 通过对用户注册信息进行检测,筛查过滤用户提交注册的用户名或网名昵称 | 文本审核API | 四(次重要) ### 3.需求论证之利害相关者分析 #### 3.1利害相关者分析 | 主要利益相关者 | 行为 | 关注点 | 权利 | 获得利益 | | ---- | ---- | ---- | ---- |---- | | APP开发团队 | 经过前期调研、分析用户痛点等相关行为,输出APP产品的价值主张画布,从而解决用户痛点及需求;在APP投入使用后,分析用户数据,考虑APP产品的迭代更新问题等 | 该产品的价值主张是否具有意义?该产品是否满足了用户可欲性、技术可行性和商业可行性? | 高 | 高| | API使用者(用户) | 提出相关需求,使用该APP产品满足自己“推荐系统”、“附近的打卡点” 、“语音识别”以及“用户注册”等需求,查看相关数据反馈,并可对该APP提出一定的意见反馈 | 该产品是否满足了自己的日常使用需求?该产品是否值得自己下载使用?该产品是否是免费供自己使用? | 高| 高| | API提供者(华为云、高德开放平台、有道智云开放平台、百度AI开发平台) | 为APP设计开发团队提供相关API技术支持,为UI设计师提供使用API的输出等 | 为该产品提供API接口服务支持,是否能得到回报? | 中 | 高| #### 3.2系统性偏差 人工智能API的识别存在的识别错误或识别失败的可能性,对于推荐系统、周边搜索、语音识别等API功能仍然存在差异性 #### 3.3关于[ESG](https://www.zhihu.com/question/21565680)考量 - 用户隐私安全。用户个人信息的泄漏。 - 建立信息保护机制,不随意泄露用户的信息。 ## 三、解决方案:界面流程及关键智能交互 ### 1.原型及界面设计 交互原型:[体验链接](https://modao.cc/app/e304a5ad68780d16c46defdb4cfc625269ea2e7b#screen=skk8hoftuu3ymky) ![交互原型](https://s3.ax1x.com/2021/01/23/so7ijg.jpg) ![交互原型](https://s3.ax1x.com/2021/01/23/soTxAI.jpg) ![交互原型](https://s3.ax1x.com/2021/01/23/so799f.jpg) ![交互原型](https://s3.ax1x.com/2021/01/23/so7ZEn.jpg) ### 2.用户体验/旅程分析 ![用户体验/旅程分析](https://gitee.com/yang_pei_jun/api_final/raw/master/images/%E7%94%A8%E6%88%B7%E4%BD%93%E9%AA%8C_%E6%97%85%E7%A8%8B%E5%88%86%E6%9E%90.jpg) ### 3.产品结构图 ![产品结构图](https://gitee.com/yang_pei_jun/api_final/raw/master/images/%E4%BA%A7%E5%93%81%E7%BB%93%E6%9E%84%E5%9B%BE.jpg) ### 4.产品可行性与用户可欲性 #### 4.1 用户可欲性-Desirability - 用户需求明显,且最小可行性功能可满足需求。 - 用户群体广泛,如在校学生、职场人士、退休人员皆可使用,产品的市场未来需求趋势在逐步增长。 #### 4.2技术可行性-Feasibility - 该产品具有明确的核心价值和使用需求。 - 在多种实现产品功能的技术中,我们选择了精准度高、符合用户痛点的API加值。 - 该产品API存在小低率的技术风险,但是此小概率风险对用户体验的负面影响不会压过正面影响的机率。 #### 4.3商业可行性-Viability - 华为云、高德开放平台、有道智云开放平台、百度AI开发平台提供了一定数量的免费API调用额度和优惠的额度套餐服务支持产品技术运行。 - 与相关旅行平台合作,进行浏览旅行打卡笔记的的同时也进行旅行攻略和购票等服务,用户可以通过点击外链跳转到相应的旅行平台页面。 ### 5.价值主张画布 ![价值主张画布](https://s3.ax1x.com/2021/01/22/sICacR.jpg) ## 四、解决方案:数据流程及关键智能API使用 ### 1.数据流程图 ![数据流程图](https://gitee.com/yang_pei_jun/api_final/raw/master/images/%E6%95%B0%E6%8D%AE%E6%B5%81%E7%A8%8B%E5%9B%BE.jpg) ### 2.数据流程设计可行性与用户可欲性 #### 2.1 用户可欲性-Desirability - 通过旅程的打卡,为用户提供平台记录生活,并形成一篇笔记或者卡片。 - 卡点APP的界面清晰,易于上手,操作流畅且简洁。 #### 2.2 技术可行性-Feasibility - 通过获取用户位置、信息、爱好等数据,借助“推荐系统RES”、“搜索POI”、“语音识别”、“文本审核”API功能,完成用户的旅程打卡。 - 华为云、高德开放平台、有道智云开放平台、百度AI开发平台的各项技术与且具有较高准确性的人工智能API能够为用户提供稳定且高质量的服务。 #### 2.3 商业可行性 Viability 尽管市场上有推荐型和分享型的APP,但是卡点的功能结合了各大APP缺乏的功能,能够满足用户的更大需求,用户的群体范围庞大,市场广阔。 ### 3.API代码及数据展示加值 #### 3.1 华为云—— [推荐系统RES](https://support.huaweicloud.com/res/index.html) - 接口描述: 基于华为大数据和人工智能技术,提供推荐平台和算法服务,并帮助企业构建个性化推荐应用,助力提升网站/APP的点击率、留存率和用户体验。 - 技术文档地址: [推荐系统RES](https://support.huaweicloud.com/api-res/res_02_0003.html) - 请求说明: - HTTP方法:`POST` - 请求url:`/v2.0/{project_id}/workspaces/{workspace_id}/intelligent-scenes ` - 案例参考:智能场景(猜你喜欢) - 输入请求 ``` { "id":"user01", # 需要请求的用户id "rec_num": 5 # 推荐物品的数量。 } ``` - 预测结果 ``` { "flow_id": "flow1", # 流程id "rec_num": 10, # 推荐物品结果的数量 "candidates": [ # 候选集结果 { "id": "item237", # 推荐结果物料id "score": 0.58418584, # 推荐物料的评分 "source": "WeightBehavior-DIREC" # 推荐物料来源策略 }, { "id": "item453", "score": 0.5653803, "source": "WeightBehavior-DIREC" }, { "id": "item769", "score": 0.55219465, "source": "WeightBehavior-DIREC" }, { "id": "item860", "score": 0.55219465, "source": "WeightBehavior-DIREC" }, { "id": "item974", "score": 0.55219465, "source": "WeightBehavior-DIREC" } ] } ``` #### 3.2 高德开放平台—— [POI—周边搜索](https://lbs.amap.com/api/lightmap/guide/localsearch/) - 接口描述: 在用户传入经纬度坐标点附近,在设定的范围内,按照关键字或POI类型搜索; - 技术文档地址: [POI周边搜索](https://lbs.amap.com/api/webservice/guide/api/search) - 请求说明: - 请求方法:`GET` - 请求url:`https://restapi.amap.com/v3/place/around?parameters ` - 案例参考: - 获取旅程目的地的地理编码 ``` import requests # 地理编码 def geocode(key,address,city=None,batch="false",sig=None,output="json",callback=None): """将详细的结构化地址转换为高德经纬度坐标""" geocode_url = "https://restapi.amap.com/v3/geocode/geo?parameters" params = { "key":key, "address":address, "city":city, "batch":batch, "sig":sig, "output":output, "callback":callback } r = requests.get(geocode_url,params=params) results = r.json() return results # 周边搜索 def poi_around(key,location,keywords=None,types="050000|070000|120000",city=None,radius=3000,sortrule="distance",offset=20,page=1,extensions="base",sig=None,output="json",callback=None): """在用户传入经纬度坐标点附近,在设定的范围内,按照关键字或POI类型搜索""" poi_around_url = "https://restapi.amap.com/v3/place/around?parameters" params = { "key":key, "location":location, "keywords":keywords, "types":types, "city":city, "radius":radius, "sortrule":sortrule, "offset":offset, "page":page, "extensions":extensions, "sig":sig, "output":output, "callback":callback } r = requests.get(poi_around_url,params=params) results = r.json() return results # 调用以上的地理编码和周边搜索 geo.poi_around(jun_key,'113.271191,22.779995') ``` 获取到渔人码头附近的餐饮店铺 ``` {'suggestion': {'keywords': [], 'cities': []}, 'count': '888', 'infocode': '10000', 'pois': [{'parent': [], 'address': '容桂东堤路16号G座首层之五', 'distance': '6', 'biz_ext': [], 'importance': [], 'biz_type': 'diner', 'type': '餐饮服务;中餐厅;中餐厅', 'photos': [], 'typecode': '050100', 'shopinfo': '0', 'poiweight': [], 'childtype': [], 'name': '三洲牛杂(渔人码头店)', 'location': '113.270507,22.780069', 'tel': '13824517272', 'shopid': [], 'id': 'B0FFMEXFRZ'}, {'parent': [], 'address': '容桂街道东风社区东堤路16号H3场地', 'distance': '7', 'biz_ext': [], 'importance': [], 'biz_type': 'diner', 'type': '餐饮服务;快餐厅;快餐厅', 'photos': [], 'typecode': '050300', 'shopinfo': '0', 'poiweight': [], 'childtype': [], 'name': '麦当来容奇快闪店', 'location': '113.271250,22.780028', 'tel': '0757-26683713', 'shopid': [], 'id': 'B0G23UCDIW'}, {'parent': 'B0FFH901MG', 'address': '渔人码头西南东堤路1号楼之三', 'distance': '7', 'biz_ext': [], 'importance': [], 'biz_type': 'diner', 'type': '餐饮服务;餐饮相关场所;餐饮相关', 'photos': [], 'typecode': '050000', 'shopinfo': '0', 'poiweight': [], 'childtype': '302', 'name': '任胜牛煲', 'location': '113.271139,22.779949', 'tel': '18126637710', 'shopid': [], 'id': 'B0GRBYGJOD'}, {'parent': 'B0FFH901MG', 'address': '容桂东堤路16号渔人码头内', 'distance': '17', 'biz_ext': [], 'importance': [], 'biz_type': 'diner', 'type': '餐饮服务;餐饮相关场所;餐饮相关', 'photos': [], 'typecode': '050000', 'shopinfo': '0', 'poiweight': [], 'childtype': '302', 'name': '娱筷食堂', ``` #### 3.3 有道智云开放平台—— [实时语音识别](http://ai.youdao.com/DOCSIRMA/html/%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%ABASR/API%E6%96%87%E6%A1%A3/%E5%AE%9E%E6%97%B6%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1/%E5%AE%9E%E6%97%B6%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1-API%E6%96%87%E6%A1%A3.html) - 接口描述: 可实现对连续音频流的实时识别,转换成文本信息并返对应文字流。智能语音识别实现将多语种语音内容转换为文字,支持2分钟内音频文件转写以及实时语音转写。 - 技术文档地址: [实时语音识别API](http://ai.youdao.com/DOCSIRMA/html/%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%ABASR/API%E6%96%87%E6%A1%A3/%E5%AE%9E%E6%97%B6%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1/%E5%AE%9E%E6%97%B6%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1-API%E6%96%87%E6%A1%A3.html) - 请求url:`wss://openapi.youdao.com/stream_asropenapi?{请求参数}` - 案例参考: ``` # -*- coding: utf-8 -*- import uuid import time import websocket import hashlib file_path = '/Users/mac/Desktop/voice.wav' lang_type = 'yue' app_key = '45ff2a67206c5ab6' app_secret = 'lgJNe8FJ3tClENZn6P4mPZdIfQRaUXI9' def initialize(): nonce = str(uuid.uuid1()) curtime = str(int(time.time())) signStr = app_key + nonce + curtime + app_secret print(signStr) sign = encrypt(signStr) uri = "wss://openapi.youdao.com/stream_asropenapi?appKey=" + app_key + "&salt=" + nonce + "&curtime=" + curtime + \ "&sign=" + sign + "&version=v1&channel=1&format=wav&signType=v4&rate=16000&langType=" + lang_type print(uri) start(uri, 1600) def encrypt(signStr): hash = hashlib.sha256() hash.update(signStr.encode('utf-8')) return hash.hexdigest() def on_message(ws, message): print(message) def on_error(ws, error): print(error) def on_close(ws): print("### closed ###") def on_open(ws): count = 0 file_object = open(file_path, 'rb') while True: chunk_data = file_object.read(1600) ws.send(chunk_data, websocket.ABNF.OPCODE_BINARY) time.sleep(0.05) count = count + 1 if not chunk_data: break print(count) ws.send('{\"end\": \"true\"}', websocket.ABNF.OPCODE_BINARY) def start(uri, step): websocket.enableTrace(True) ws = websocket.WebSocketApp(uri, on_message=on_message, on_error=on_error, on_close=on_close) ws.on_open = on_open ws.run_forever() if __name__ == '__main__': initialize() ``` - 反馈结果 ``` { "result": [{ "st": [{ "bg": 50, "ed": 1250, "ws": [{ "w": "顺", "wb": 50, "we": 340 }, { "w": "德", "wb": 340, "we": 500 }, { "w": "区", "wb": 500, "we": 780 }, { "w": "渔", "wb": 780, "we": 895 }] }, { "w": "人", "wb": 895, "we": 1035 }] }, { "w": "码", "wb": 1035, "we": 1250 }] }, { "w": "头", "wb": 1250, "we": 1250 }] }], "seg_id": 0 }], "errorCode": "0", "action": "recognition" } ``` #### 3.4 百度智能云开放平台—— [文本审核](https://cloud.baidu.com/product/textcensoring) - 接口描述: - 用户评论过滤:对网站用户的评论信息进行检测,审核出涉及色情、暴恐、政治敏感、恶意推广等内容,保证良好的用户体验 - 注册信息筛查:对用户的注册信息进行筛查,避免黑产通过用户名实现违规信息的推广 - 文章内容审核:对UGC文章内容进行多个维度的审核,避免因内容违规导致的APP下架等损失 - 技术文档地址:[文本审核API](https://cloud.baidu.com/doc/ANTIPORN/s/Rk3h6xb3i) - 请求说明: - 请求方式:`POST` - 接口地址:`https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined ` - 案例参考: ``` { "log_id": 15572142621780024, "conclusion": "合规", "conclusionType": 1, "data": [{ "type": 14, "subType": 0, "conclusion": "合规", "conclusionType": 1, "msg": "用户注册审核通过", "hits": [{ "datasetName": "用户注册审核", "words": ["Jelly"] }] }] } ``` ### 4.API使用比较分析 主要分析`语音识别`API #### 4.1 功能对比 ##### 百度智能云开放平台 [功能链接](https://cloud.baidu.com/product/speech/realtime_asr) - 技术领先识别准确 - 基于Deep Peak2端到端建模,超过10万小时数据训练,多采样率多场景声学建模,近场中文普通话识别准确率达98% - 多语种识别 - 支持普通话和略带口音的中文识别;支持英文识别 - 智能语言处理 - 使用大规模数据集训练语言模型,对识别中间结果进行智能纠错,并根据语音的内容理解和停顿智能匹配合适的标点符号,。!? - 多种调用方式 - 支持WebSocket API,支持Android、iOS、Linux SDK,可以在多种操作系统、多种设备终端上调用,快速上手,简单易用 - 毫秒级实时识别音频流 - 首包响应时间毫秒级,并实时展示中间文字结果,快速识别音频流 - 文字识别结果支持时间戳 - 识别返回的文字结果带有时间戳,展示VAD切分句子开始和结束时间,方便进行功能开发 ##### 有道智云开放平台 [功能链接](https://ai.youdao.com/DOCSIRMA/html/%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%ABASR/API%E6%96%87%E6%A1%A3/%E5%AE%9E%E6%97%B6%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1/%E5%AE%9E%E6%97%B6%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1-API%E6%96%87%E6%A1%A3.html) - 智能语音识别服务当前支持中文普通话、英语、日文和韩文的输入。 - 智能语音识别对上传的语音数据大小:最长支持120s的录音文件。文件大小不超过10M。 - 实时语音识别SDK是对有道实时语音识别接口服务进行封装。提供快速的接入方式;同时提供数据统计能力,方便了解用户使用情况。 - 有道智云实时语音识别 SDK 是有道智云开放平台提供的云服务之一,是有道在线实时语音识别接口的一种实现,支持在线实时语音识别。 #### 价格对比 ###### 百度智能云平台 [价格链接](https://cloud.baidu.com/doc/SPEECH/s/Jk38lxn2j) - 按小时包预付费 用户购买小时包后即可直接使用,小时包购买之日起一年内有效,具体价格如下: 小时包规格(小时) | 价格(元) | 单价(元/小时) | --- | --- | --- | 1000 | 1800 | 1.8 | 10000 | 15000 | 1.5 | 100000 | 120000 | 1.2 | 500000 | 450000 | 0.9 | - 按调用时长后付费 系统按用户实际使用,每小时出账单实时扣费,账户内需保留足量余额,具体价格如下: 月调用小时 | 价格(元) | --- | --- | --- | 0-∞ | 1800 | 3 | - 高并发量扩容 购买并发| 价格(元)| --- | --- | 按月/并发 | 100 | 按年/并发 | 1000 | 补充说明: 1.当且仅当用户产生成功调用或因鉴权、音频质量导致的失败调用时,系统会消耗、记录调用时长,其余情况均不涉及计费。 2.月调用时长统计周期为自然月。 ###### 有道智云开放平台 [价格链接](https://ai.youdao.com/DOCSIRMA/html/%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%ABASR/%E4%BA%A7%E5%93%81%E5%AE%9A%E4%BB%B7/%E5%AE%9E%E6%97%B6%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1/%E5%AE%9E%E6%97%B6%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1-%E4%BA%A7%E5%93%81%E5%AE%9A%E4%BB%B7.html) - 免费体验 对于智能语音识别服务,各接口拥有一定量的免费查询字符数(新用户注册账户时,系统会向您账户赠予50元体验资金),可免费体验有道智云的服务。 - 实时语音服务配置 计费方式 | 服务内容 | 月调用时长(小时) | 语音识别(元) | --- | --- | --- | --- | 按月调用量计费 | 实时语音识别 | 05000 | 4元/小时 | 说明: “调用量”是指成功调用的次数,调用失败不计费 - 资源包计费价目表 资源包规格 | 资源包有效时长 | 价格 | --- | --- | --- | 100小时 | 90天 | 283元 | 1000小时 | 180天 | 3735元 | 5000小时 | 360天 | 18455元 | 10000小时 | 360天 | 25445元 | 说明: 1.资源包可在用户登陆后,进入控制台-资源包管理中进行购买。 2.资源包支持用支付宝、微信等方式进行支付。 3.资源包不支持退款。 4.资源包支付后次日凌晨生效。(如:在2019年6月1日15:30分购买了资源包,则该资源包在2019年6月2日00:00分开始生效。) 5.资源包到期后,若未及时续费,系统会自动以按量计费的方式进行结算。 6.实际使用量超出资源包额度时,超出部分按量付费。 #### 4.3总结 - 从功能上说:百度智能云开放平台的功能叫全面 - 从价格上说:有道智云的价格相对较低 ## 五、总结心得与感谢 - **总结心得**: 在《API、机器学习与人工智能》的课程中,体会到了人工智能在日常生活中的运用十分广泛,了解到API、ML、AI的价值十分重要,学习了一些的技术人员的基本操作(如调用api等),产品经理的思维,基于用户,满足用户的需求。在制作本项目的过程中,学习到了许多撰写文档的技巧,感受到需要花费很多的时间与经理去完成一份产品需求文档,制作了产品原型,用户交互,对于用户流程、界面流程有了进一步的了解。总的来说,这门课程中,不仅学到有趣的API、ML、AI功能,而且做出了一个产品原型,使我受益匪浅。 - **感谢**: [华为云](https://www.huaweicloud.com/)、[高德开放平台](https://lbs.amap.com/)、[有道智云开放平台](https://ai.youdao.com/#/)、[百度智能云开放平台](https://cloud.baidu.com/)各大开放平台提供的免费资源调用;**感谢**:[ProcessOn](https://www.processon.com/)提供优秀的流程图制作工具;[墨刀](https://modao.cc/)提供便捷的产品原型制作工具,[人人都是产品经理](http://www.woshipm.com/)网站,提供与分享许多产品设计经验与用户画像、价值画布等图形制作参考。 --- - 独特非重复有效外连URL:20个 - 高水平原创图表:9张图 + 3张表 --- - 交互原型:[体验链接](https://modao.cc/app/e304a5ad68780d16c46defdb4cfc625269ea2e7b#screen=skk8hoftuu3ymky) - 带语音旁白投影片:[录屏链接](https://www.bilibili.com/video/BV1HT4y1K7Zt/)