<!-- markdown css tag --><div class="pinggu_markdown">
<div class="pinggu_markdown__html"><h1 id="面對(duì)文旅行業(yè)解決博物館游客痛點(diǎn):?jiǎn)?dòng)數(shù)字化轉(zhuǎn)型的設(shè)計(jì)思維工作坊迭代二">面對(duì)文旅行業(yè)解決博物館游客痛點(diǎn):?jiǎn)?dòng)數(shù)字化轉(zhuǎn)型的設(shè)計(jì)思維工作坊迭代二</h1>
<h2 id="解決文旅行業(yè)博物館游客痛點(diǎn)的產(chǎn)品原型作品策劃">解決文旅行業(yè)博物館游客痛點(diǎn)的產(chǎn)品原型/作品策劃</h2>
<ol>
<li>為解決文旅行業(yè)博物館游客痛點(diǎn),本項(xiàng)目團(tuán)隊(duì)已設(shè)計(jì)并執(zhí)行《面對(duì)文旅行業(yè)解決博物館游客痛點(diǎn):?jiǎn)?dòng)數(shù)字化轉(zhuǎn)型的設(shè)計(jì)思維工作坊》,并產(chǎn)出<a href="URL">《Story Museum MRD》文檔</a>丶<a href="URL">《Story Museum BRD》文檔</a>。(含顧客旅程/服務(wù)藍(lán)圖)</li>
<li>為了驗(yàn)證商業(yè)可行性/技術(shù)可行性/用戶可欲性,我們團(tuán)隊(duì)產(chǎn)出服務(wù)藍(lán)圖、用戶旅程地圖、交互流程圖、數(shù)據(jù)流程圖、API代碼。</li>
</ol>
<h3 id="商業(yè)可行性技術(shù)可行性用戶可欲性">商業(yè)可行性/技術(shù)可行性/用戶可欲性</h3>
<p>● Viability 商業(yè)可行性:近年來博物館收入整體呈現(xiàn)震蕩上行趨勢(shì),該APP產(chǎn)品在后期可通過設(shè)置廣告欄位以及開設(shè)文創(chuàng)產(chǎn)品商城增加收益<br>
● Feasibility 技術(shù)可行性:利用百度開放平臺(tái)的通用物體和場(chǎng)景識(shí)別、訊飛在線語(yǔ)音合成以及有道智云語(yǔ)音翻譯的API調(diào)用作為技術(shù)支撐<br>
● Desirability 用戶可欲性:用戶對(duì)于博物館文物展品信息了解的需求以及對(duì)于信息生動(dòng)化呈現(xiàn)的需求</p>
<h3 id="服務(wù)藍(lán)圖">服務(wù)藍(lán)圖</h3>
<p><img src="https://pic.baixiongz.com/uploads/2021/06/05/992008ae1838b.png" alt="服務(wù)藍(lán)圖"></p>
<h3 id="用戶旅程地圖">用戶旅程地圖</h3>
<p><img src="https://pic.baixiongz.com/uploads/2021/06/05/5284ce55a0dfa.png" alt="用戶旅程地圖"></p>
<h3 id="交互界面流程圖">交互界面流程圖</h3>
<p><img src="https://pic.baixiongz.com/uploads/2021/06/05/403855d018b25.png" alt="交互界面流程圖"></p>
<h3 id="數(shù)據(jù)流程圖">數(shù)據(jù)流程圖</h3>
<p><img src="https://pic.baixiongz.com/uploads/2021/06/05/9e5274110a24d.jpeg" alt="數(shù)據(jù)流程圖"></p>
<h3 id="api代碼">API代碼</h3>
<p>本產(chǎn)品的API主要采用的是<a href="https://ai.baidu.com/tech/imagerecognition/general">百度開放平臺(tái)的通用物體和場(chǎng)景識(shí)別</a>、<a href="https://www.xfyun.cn/services/online_tts">訊飛在線語(yǔ)音合成</a>以及<a href="http://fanyi-api.baidu.com/">百度開放平臺(tái)通用翻譯技術(shù)</a>。</p>
<h3 id="api代碼調(diào)用示例">API代碼調(diào)用示例</h3>
<h5 id="物體識(shí)別(使用百度開放平臺(tái)通用物體和場(chǎng)景識(shí)別)">物體識(shí)別(使用百度開放平臺(tái)通用物體和場(chǎng)景識(shí)別)</h5>
<p><a href="https://ai.baidu.com/ai-doc/IMAGERECOGNITION/Xk3bcxe21">技術(shù)文檔鏈接</a></p>
<h6 id="api調(diào)用">API調(diào)用</h6>
<p>接口描述:該請(qǐng)求用于通用物體及場(chǎng)景識(shí)別,即對(duì)于輸入的一張圖片(可正常解碼,且長(zhǎng)寬比適宜),輸出圖片中的多個(gè)物體及場(chǎng)景標(biāo)簽。</p>
<p>請(qǐng)求URL :<a href="https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general">https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general</a></p>
<p>請(qǐng)求方法:POST</p>
<ul>
<li>獲取token</li>
</ul>
<pre><code># encoding:utf-8
import requests
# client_id 為官網(wǎng)獲取的AK, client_secret 為官網(wǎng)獲取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官網(wǎng)獲取的AK】&client_secret=【官網(wǎng)獲取的SK】'
response = requests.get(host)
if response:
print(response.json())
</code></pre>
<ul>
<li>文物識(shí)別</li>
</ul>
<pre><code># encoding:utf-8
import requests
import base64
'''
通用物體和場(chǎng)景識(shí)別
'''
request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general"
# 二進(jìn)制方式打開圖片文件
f = open('./簪花仕女圖.png', 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
access_token = '[調(diào)用鑒權(quán)接口獲取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
print (response.json())
</code></pre>
<ul>
<li>輸出內(nèi)容</li>
</ul>
<pre><code>{'log_id': 8705286469577267761, 'result_num': 5, 'result': [{'score': 0.823557, 'root': '商品-工藝品', 'keyword': '繪畫'}, {'score': 0.578453, 'root': '商品-繪畫', 'keyword': '圖畫'}, {'score': 0.386313, 'root': '非自然圖像-彩色動(dòng)漫', 'keyword': '卡通動(dòng)漫人物'}, {'score': 0.210961, 'root': '非自然圖像-文字圖', 'keyword': '報(bào)紙雜志'}, {'score': 0.027196, 'root': '人物-人物特寫', 'keyword': '美女'}]}
</code></pre>
<h5 id="語(yǔ)音合成(使用訊飛開放平臺(tái)在線語(yǔ)音合成)">語(yǔ)音合成(使用訊飛開放平臺(tái)在線語(yǔ)音合成)</h5>
<p><a href="https://www.xfyun.cn/doc/tts/online_tts/API.html#%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E">技術(shù)文檔鏈接</a></p>
<h5 id="api調(diào)用-1">API調(diào)用</h5>
<p>接口描述:該語(yǔ)音能力是通過Websocket API的方式給開發(fā)者提供一個(gè)通用的接口。Websocket API具備流式傳輸能力,適用于需要流式數(shù)據(jù)傳輸?shù)腁I服務(wù)場(chǎng)景。相較于SDK,API具有輕量、跨語(yǔ)言的特點(diǎn);相較于HTTP API,Websocket API協(xié)議有原生支持跨域的優(yōu)勢(shì)。</p>
<p>請(qǐng)求地址 :ws[s]: <a href="//tts-api.xfyun.cn/v2/tts">//tts-api.xfyun.cn/v2/tts</a></p>
<p>請(qǐng)求方法:POST</p>
<ul>
<li>語(yǔ)音合成</li>
</ul>
<pre><code># -*- coding:utf-8 -*-
#
# author: iflytek
#
# 本demo測(cè)試時(shí)運(yùn)行的環(huán)境為:Windows + Python3.7
# 本demo測(cè)試成功運(yùn)行時(shí)所安裝的第三方庫(kù)及其版本如下:
# cffi==1.12.3
# gevent==1.4.0
# greenlet==0.4.15
# pycparser==2.19
# six==1.12.0
# websocket==0.2.1
# websocket-client==0.56.0
# 合成小語(yǔ)種需要傳輸小語(yǔ)種文本、使用小語(yǔ)種發(fā)音人vcn、tte=unicode以及修改文本編碼方式
# 錯(cuò)誤碼鏈接:https://www.xfyun.cn/document/error-code (code返回錯(cuò)誤碼時(shí)必看)
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
import websocket
import datetime
import hashlib
import base64
import hmac
import json
from urllib.parse import urlencode
import time
import ssl
from wsgiref.handlers import format_date_time
from datetime import datetime
from time import mktime
import _thread as thread
import os
STATUS_FIRST_fr ame = 0 # 第一幀的標(biāo)識(shí)
STATUS_CONTINUE_fr ame = 1 # 中間幀標(biāo)識(shí)
STATUS_LAST_fr ame = 2 # 最后一幀的標(biāo)識(shí)
class Ws_Param(ob ject):
# 初始化
def __init__(self, APPID, APIKey, APISecret, Text):
self.APPID = APPID
self.APIKey = APIKey
self.APISecret = APISecret
self.Text = Text
# 公共參數(shù)(common)
self.CommonArgs = {"app_id": self.APPID}
# 業(yè)務(wù)參數(shù)(business),更多個(gè)性化參數(shù)可在官網(wǎng)查看
self.BusinessArgs = {"aue": "raw", "auf": "audio/L16;rate=16000", "vcn": "xiaoyan", "tte": "utf8"}
self.Data = {"status": 2, "text": str(base64.b64encode(self.Text.encode('utf-8')), "UTF8")}
#使用小語(yǔ)種須使用以下方式,此處的unicode指的是 utf16小端的編碼方式,即"UTF-16LE"”
#self.Data = {"status": 2, "text": str(base64.b64encode(self.Text.encode('utf-16')), "UTF8")}
# 生成url
def create_url(self):
url = 'wss://tts-api.xfyun.cn/v2/tts'
# 生成RFC1123格式的時(shí)間戳
now = datetime.now()
date = format_date_time(mktime(now.timetuple()))
# 拼接字符串
signature_origin = "host: " + "ws-api.xfyun.cn" + "\n"
signature_origin += "date: " + date + "\n"
signature_origin += "GET " + "/v2/tts " + "HTTP/1.1"
# 進(jìn)行hmac-sha256進(jìn)行加密
signature_sha = hmac.new(self.APISecret.encode('utf-8'), signature_origin.encode('utf-8'),
digestmod=hashlib.sha256).digest()
signature_sha = base64.b64encode(signature_sha).decode(encoding='utf-8')
authorization_origin = "api_key=\"%s\", algorithm=\"%s\", headers=\"%s\", signature=\"%s\"" % (
self.APIKey, "hmac-sha256", "host date request-line", signature_sha)
authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')
# 將請(qǐng)求的鑒權(quán)參數(shù)組合為字典
v = {
"authorization": authorization,
"date": date,
"host": "ws-api.xfyun.cn"
}
# 拼接鑒權(quán)參數(shù),生成url
url = url + '?' + urlencode(v)
# print("date: ",date)
# print("v: ",v)
# 此處打印出建立連接時(shí)候的url,參考本demo的時(shí)候可取消上方打印的注釋,比對(duì)相同參數(shù)時(shí)生成的url與自己代碼生成的url是否一致
# print('websocket url :', url)
return url
def on_message(ws, message):
try:
message =json.loads(message)
code = message["code"]
sid = message["sid"]
audio = message["data"]["audio"]
audio = base64.b64decode(audio)
status = message["data"]["status"]
print(message)
if status == 2:
print("ws is closed")
ws.close()
if code != 0:
errMsg = message["message"]
print("sid:%s call error:%s code is:%s" % (sid, errMsg, code))
else:
with open('./demo.pcm', 'ab') as f:
f.write(audio)
except Exception as e:
print("receive msg,but parse exception:", e)
# 收到websocket錯(cuò)誤的處理
def on_error(ws, error):
print("### error:", error)
# 收到websocket關(guān)閉的處理
def on_close(ws):
print("### closed ###")
# 收到websocket連接建立的處理
def on_open(ws):
def run(*args):
d = {"common": wsParam.CommonArgs,
"business": wsParam.BusinessArgs,
"data": wsParam.Data,
}
d = json.dumps(d)
print("------>開始發(fā)送文本數(shù)據(jù)")
ws.send(d)
if os.path.exists('./demo.pcm'):
os.remove('./demo.pcm')
thread.start_new_thread(run, ())
if __name__ == "__main__":
# 測(cè)試時(shí)候在此處正確填寫相關(guān)信息即可運(yùn)行
wsParam = Ws_Param(APPID='輸入APPID', APIKey='輸入APIKey',
APISecret='輸入APISecret',
Text="這是一個(gè)語(yǔ)音合成示例")
websocket.enableTrace(False)
wsUrl = wsParam.create_url()
ws = websocket.WebSocketApp(wsUrl, on_message=on_message, on_error=on_error, on_close=on_close)
ws.on_open = on_open
ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})
</code></pre>
<ul>
<li>輸出內(nèi)容</li>
</ul>
<pre><code> {
"code":0,
"message":"success",
"sid":"ttsxxxxxxxxxxx",
"data":{
"audio":"QAfe..........",
"ced":"14",
"status":2
}
}
</code></pre>
<h4 id="api使用風(fēng)險(xiǎn)評(píng)估">API使用風(fēng)險(xiǎn)評(píng)估</h4>
<p>可能出現(xiàn)的錯(cuò)誤及處理方法:</p>
<ol>
<li>百度通用物體和場(chǎng)景識(shí)別技術(shù)暫時(shí)對(duì)于一些文物可能識(shí)別不出:1.需要擴(kuò)大文物圖片數(shù)據(jù)庫(kù),繼續(xù)訓(xùn)練強(qiáng)化機(jī)器學(xué)習(xí)2.在APP無法識(shí)別出該文物時(shí)提醒用戶反饋缺失的文物數(shù)據(jù),以方便后期擴(kuò)大完善數(shù)據(jù)庫(kù)。3.在用戶拍照識(shí)別的過程中也收集用戶所上傳的圖片數(shù)據(jù)信息。</li>
<li>百度通用物體和場(chǎng)景識(shí)別技術(shù)還無法實(shí)現(xiàn)返回文物故事這一功能:可以先完成文物故事數(shù)據(jù)庫(kù),再進(jìn)行數(shù)據(jù)庫(kù)與該API技術(shù)的連接。</li>
</ol>
<h2 id="個(gè)人貢獻(xiàn)與心得">個(gè)人貢獻(xiàn)與心得</h2>
<p>在本次的團(tuán)隊(duì)工作坊項(xiàng)目中我參與了全過程的構(gòu)思及研討,并且與組員一同編寫了文檔。在這個(gè)過程中,我體會(huì)到了跨學(xué)科團(tuán)隊(duì)的好處是能夠?qū)Υ隧?xiàng)目的各個(gè)方面都有一個(gè)較為全面的、專業(yè)的整合性考量,對(duì)我們完成一份完整的優(yōu)秀項(xiàng)目有著不可忽視的力量;與此同時(shí),參與到跨學(xué)科團(tuán)隊(duì)之中頁(yè)能夠拓寬自己的眼界,對(duì)自己的能力進(jìn)行查缺補(bǔ)漏,在以后的工作中也會(huì)更懂得如何與不一樣崗位的人打交道,對(duì)自己做到增益其所不能。</p>
</div>
</div>