背景介紹
你的項(xiàng)目跟人工智能無(wú)關(guān)母怜?自己手寫(xiě)不可行?看完本文小白也能2小時(shí)讓你的應(yīng)用具備人臉識(shí)別活體檢測(cè)等等功能啦眉孩!近兩年炒的最火的就是人工智能了咕别,但是到處都講人工智能技健,區(qū)塊鏈啥啥的,總感覺(jué)跟普通安卓應(yīng)用開(kāi)發(fā)沒(méi)多大關(guān)系惰拱。
最近有點(diǎn)閑得蛋疼啊雌贱,于是找了有關(guān)于指紋識(shí)別,人臉識(shí)別方面的技術(shù)博客,但是少之又少啊不能快速的集成到自己項(xiàng)目帽芽∩鞠疲基于本人對(duì)百度是比較偏愛(ài)的,于是乎看了下官網(wǎng)就直接上車(chē)了导街,大概一天下來(lái)就ok了披泪。我是小白啊,這篇文章是基于小白的搬瑰,如果你是技術(shù)大牛款票,可以忽略了。
目前百度人臉識(shí)別調(diào)用完全免費(fèi)的(號(hào)稱(chēng)宣布永久免費(fèi)使用哦泽论,算是業(yè)界良心了)艾少,企業(yè)認(rèn)證后可以免費(fèi)10QPS限制調(diào)用,所謂QPS限制也就是一秒鐘10次內(nèi)的調(diào)用翼悴,每秒10次調(diào)用可以滿(mǎn)足一些小型企業(yè)了缚够。免費(fèi)和付費(fèi)的唯一區(qū)別就是QPS限制調(diào)用量不同。再說(shuō)了用戶(hù)量多了鹦赎,給點(diǎn)錢(qián)也是應(yīng)該的吧谍椅,老板也不會(huì)在乎這點(diǎn)錢(qián)的吧(幾百塊一月不等)。
集成百度sdk基本上可以直接copy示例demo直接在自己項(xiàng)目運(yùn)行古话,順利的話(huà)大概半天雏吭,跟著我的文章大概兩小時(shí)足夠!不過(guò)你開(kāi)始得有百度AI開(kāi)放平臺(tái)賬戶(hù)及企業(yè)認(rèn)證(工作日內(nèi)認(rèn)證大概4小時(shí)陪踩,最遲不會(huì)超過(guò)一天杖们,周末都有人審核這點(diǎn)和給力了),集成過(guò)程中你看完整個(gè)文章肩狂,應(yīng)該避免了一些問(wèn)題摘完,一天內(nèi)應(yīng)該可以讓自己的項(xiàng)目跑起來(lái)。下面全部為快速集成 Android離線(xiàn)采集sdk 人臉登錄示例過(guò)程(粗略大概3分鐘可看完本文婚温,文末有巨型福利)为肮。
進(jìn)去百度AI開(kāi)發(fā)者官網(wǎng)垃僚,人臉識(shí)別提供了幾種解決方案榔昔,集成大多類(lèi)似零蓉。因?yàn)槲覀兊臉I(yè)務(wù)場(chǎng)景是需要用到人臉登錄涛癌,人臉簽到功能昼接,所以我選擇了 Android離線(xiàn)采集sdk洞斯。具體選擇哪種根據(jù)自己的需求選擇即可尝丐。
目前市面上做人臉?lè)矫娴墓痉浅6嗖舯疲信e幾個(gè):
百度人臉識(shí)別 Face++ 商湯科技 騰訊 虹軟
當(dāng)然還有一些其他的吃媒,目前比較出名的大概就這些,差別其實(shí)更多是在技術(shù)支持上(至少我是這么認(rèn)為的)以及費(fèi)用,據(jù)我了解:百度赘那、Face++刑桑、虹軟,大概對(duì)比下:
百度人臉識(shí)
優(yōu)點(diǎn):價(jià)格便宜募舟,客服很友好
缺點(diǎn):待發(fā)掘
Face++
優(yōu)點(diǎn):技術(shù)更好祠斧,文檔很清晰,因?yàn)闆](méi)有接入暫且不知道技術(shù)支持怎么樣不過(guò)應(yīng)該不差
缺點(diǎn):有點(diǎn)小貴
虹軟
優(yōu)點(diǎn):全套離線(xiàn)拱礁,后臺(tái)前端都可以離線(xiàn)實(shí)現(xiàn)琢锋,文檔也挺詳細(xì)的
缺點(diǎn):看了下他們技術(shù)論壇,貌似問(wèn)題也不少呢灶,而且回復(fù)也不是很及時(shí)的樣子吴超,最主要是需要自己搭建一套,他們的人臉對(duì)比居然也是放在本地APP數(shù)據(jù)庫(kù)的(當(dāng)然這不算是缺點(diǎn)了)
說(shuō)了這么多鸯乃,想用啥自己選擇就行鲸阻,我們公司目前用的百度人臉識(shí)別,進(jìn)入正題不多BB缨睡。
一赘娄、注冊(cè)百度開(kāi)發(fā)者賬號(hào)
這個(gè)注冊(cè)企業(yè)認(rèn)證(工作日內(nèi)認(rèn)證大概4小時(shí),最遲不會(huì)超過(guò)一天宏蛉,周末都有人審核這點(diǎn)和給力了)遣臼,而且需要公司的資質(zhì)信息,我們當(dāng)時(shí)已經(jīng)有了所以我就直接拿來(lái)用拾并。如果你卡在沒(méi)有認(rèn)證無(wú)法下載sdk的話(huà)揍堰,我教你一招,問(wèn)下你公司運(yùn)營(yíng)說(shuō)你的項(xiàng)目需要某某功能微信某某認(rèn)證嗅义,需要公司營(yíng)業(yè)執(zhí)照?qǐng)D片屏歹,套路下不就有了啊,運(yùn)營(yíng)那里有公司執(zhí)照那些的之碗。實(shí)在不行看個(gè)體工商戶(hù)執(zhí)照行不行自己試試吧蝙眶。http://ai.baidu.com/
二、新建項(xiàng)目獲取授權(quán)文件
這一步算是前期測(cè)試的重要步驟褪那,先要到控制臺(tái)(默認(rèn)第一步已經(jīng)完成了)百度人臉識(shí)別鏈接
這個(gè)控制臺(tái)基本就是人臉識(shí)別的所有開(kāi)發(fā)SDK幽纷,技術(shù)資料的地方了,前端的SDK在SDK管理里面進(jìn)行下載
首先你需要在采集SDK管理里面下載授權(quán)文件博敬,他會(huì)讓你跟你據(jù)包名跟key的MD5來(lái)進(jìn)行生成友浸,具體步驟按著他們的操作就行了。這里也有官網(wǎng)集成步驟文檔:http://ai.baidu.com/docs#/Face-Android-SDK/top
如下圖偏窝,最頂部 有問(wèn)題找客服可以提交工單收恢,有比較專(zhuān)業(yè)的專(zhuān)屬客服給你回答武学,回復(fù)速度大概也是4小時(shí)左右吧。下面有創(chuàng)建應(yīng)用伦意,左側(cè)有sdk下載入口火窒。
進(jìn)入下載授權(quán)文件是需要您的開(kāi)發(fā)者賬號(hào)企業(yè)認(rèn)證才可以進(jìn)入的哦。
這個(gè)授權(quán)文件下載后放在Android項(xiàng)目的assets 文件夾
SDK下載跟示例工程下載
在采集SDK管理這里下拉會(huì)看到下載SDK跟示例工程這兩欄
但是我建議你可以直接根據(jù)你們公司的業(yè)務(wù)需求下載對(duì)應(yīng)的示例工程驮肉,比如我下載的就是人臉登陸/考勤這個(gè)沛鸵,這里面已經(jīng)包含了全套的離線(xiàn)SDK功能(活體檢測(cè),人臉追蹤缆八,質(zhì)量檢測(cè)等等)曲掰,如果你要下載帶聲音的活體檢測(cè)demo,比如眨眨眼奈辰,張張嘴栏妖,下載帶有活體檢測(cè)功能的demo即可。如下圖:
這是人臉登錄示例demo運(yùn)行效果
這是 張張嘴眨眨眼語(yǔ)音提示活體檢測(cè)demo運(yùn)行效果
md5指紋:你自己的項(xiàng)目的簽名的md5指紋密碼奖恰,不懂的可以看下這篇文章吊趾。Android Studio生成簽名文件,自動(dòng)簽名,以及獲取SHA1和MD5值:https://blog.csdn.net/it666dhw/article/details/80731021
我集成的是第一個(gè)人臉登錄sdk,下載完示例工程后把項(xiàng)目導(dǎo)入AS瑟啃,下面就是改動(dòng)下包名跟License
修改包名
在app build里面改成自己上圖里面的包名:com.test.facere(你自包名)
修改License
把剛下載的License文件導(dǎo)入到對(duì)應(yīng)的 assets包下论泛,修改工程里面Config.java類(lèi)的licenseID(上圖的)以及l(fā)icenseFileName(對(duì)應(yīng)License的文件名,和你下載時(shí)起的自定義名字一致)蛹屿,把對(duì)應(yīng)的ak屁奏,sk密碼改為你的對(duì)應(yīng)的即可。
注意:包名改變后或?qū)氲阶约喉?xiàng)目的時(shí)候错负,運(yùn)行會(huì)報(bào)找不到R 文件錯(cuò)誤坟瓢,常見(jiàn)問(wèn)題啦不要方哈,一個(gè)個(gè)用到R文件的類(lèi)刪除R 文件的導(dǎo)包犹撒,然后自動(dòng)導(dǎo)包即可折联,就幾個(gè)類(lèi)用到而已。你也可以用切換項(xiàng)目packages 視圖下 识颊,將要改的包名改為你的項(xiàng)目的包名applicationId诚镰,然后必須clean ,在rebuild 就可祥款,建議一個(gè)個(gè)刪除自動(dòng)導(dǎo)包還快省事清笨。
以上兩步做完沒(méi)啥問(wèn)題示例工程就可以跑起來(lái)了。
運(yùn)行項(xiàng)目后镰踏,你可以自行看看人臉檢測(cè)的一些回調(diào)方法:
3.faceDetectManager.setOnTrackListener設(shè)置人臉檢測(cè)監(jiān)聽(tīng)器
回調(diào)方法是
publicvoidonTrack(FaceFilter.TrackedModel trackedModel)
乍一看這個(gè)回調(diào)跟
faceDetectManager.setOnFaceDetectListener
差不多函筋,其實(shí)如果仔細(xì)看FaceDetectManager這個(gè)類(lèi)的話(huà)會(huì)發(fā)現(xiàn)在
privatevoidprocess(int[] argb,intwidth,intheight, ArgbPool pool)
這個(gè)方法里面有這樣一段代碼
if(value ==0) { faceFilter.filter(faces, frame);//等于0的時(shí)候才帶過(guò)去}if(listener !=null) { listener.onDetectFace(value, faces, frame);//檢測(cè)人臉把value值也帶過(guò)去,用于判斷人臉位置}
當(dāng)value為0(表示是一張合格人臉)的時(shí)候會(huì)在FaceFilter中調(diào)用filter方法奠伪,并且在該方法中把一個(gè)單個(gè)face設(shè)置到onTrace回調(diào)中跌帐,如果listener不為空的話(huà)直接放到onDetectFace這個(gè)回調(diào)中,所以從這里也可以看出來(lái)其實(shí)
faceDetectManager.setOnFaceDetectListener
就是為了讓你獲取一張合格的人臉(可以在這個(gè)里面處理你具體的合格人臉操作)
回歸正題绊率,既然onTrace回調(diào)是一個(gè)合格的人臉就好辦了谨敛,可以直接拿到TrackedModel里面的人臉圖片和服務(wù)器進(jìn)行比對(duì),具體代碼邏輯示例代碼里面也已經(jīng)實(shí)現(xiàn)了滤否,對(duì)比結(jié)束后會(huì)返回一定的分?jǐn)?shù)給你脸狸,如果大于80或者你覺(jué)得的分?jǐn)?shù)就認(rèn)定這個(gè)是你在手機(jī)端注冊(cè)過(guò)的人臉,然后進(jìn)行邏輯處理藐俺。
遇到的小問(wèn)題
運(yùn)行demo后發(fā)現(xiàn)用一張圖片就可以識(shí)別通過(guò)炊甲,明明上面標(biāo)明了活體檢測(cè)呀,domo默認(rèn)是沒(méi)有開(kāi)啟活體檢測(cè)的欲芹,需要自行改下一個(gè)參數(shù)就好啦卿啡。
1.初始化application類(lèi)初始化
tracker.set_isCheckQuality(true);
// 是否進(jìn)行活體校驗(yàn)
tracker.set_isVerifyLive(true);
2.在**APIService **這個(gè)類(lèi)改動(dòng)下三個(gè)請(qǐng)求接口的參數(shù):
// 可以根據(jù)實(shí)際業(yè)務(wù)情況靈活調(diào)節(jié)
params.setQualityControl("NORMAL");
params.setLivenessControl("HIGH");//只有為HIGH時(shí)才會(huì)符合活體檢測(cè)要求。
改了這兩個(gè)地方一張圖片就通不過(guò)啦菱父,我也納悶了底層是怎么識(shí)別一張圖片是否是活體的颈娜,唉,對(duì)我來(lái)說(shuō)太高端了吧浙宜。官辽。。
在線(xiàn)請(qǐng)求活體檢測(cè)的接口
3.當(dāng)然文檔也給出了在線(xiàn)請(qǐng)求活體檢測(cè)的接口:http://ai.baidu.com/docs#/Face-Liveness-V3/top可以返回圖片的活體質(zhì)量分?jǐn)?shù)值粟瞬,你可以根據(jù)這個(gè)返回值來(lái)判斷是否為活體同仆。按照官網(wǎng)文檔操作的時(shí)候還是有點(diǎn)坑了,那個(gè)參數(shù)傳的不對(duì)導(dǎo)致返回的數(shù)據(jù)為空裙品,調(diào)用在線(xiàn)活體檢測(cè)v3的api乓梨,一直報(bào){"error_code":222200,"error_msg":"request body should be json format"
Map<String, Object> map = new HashMap<>();
List<Object> list = new ArrayList<Object>();
String imge = AuthService.getImge();
map.put("image", imge);//總數(shù)據(jù)大小應(yīng)小于10M
map.put("face_field", "face_liveness,thresholds");
map.put("image_type", "BASE64");
list.add(map);
String param = GsonUtils.toJson(list);
復(fù)制拿去吧:
/**
* 在線(xiàn)活體檢測(cè)
*/
public class FaceVerify {
/**
* 重要提示代碼中所需工具類(lèi)
* FileUtil,Base64Util,HttpUtil,GsonUtils請(qǐng)從
* https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
* https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
* https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
* https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
* 下載
* @param bmp
*/
public static String faceVerify(Bitmap bmp) {
// 請(qǐng)求url
String url ="https://aip.baidubce.com/rest/2.0/face/v3/faceverify";
Map map =new HashMap<>();
List list =new ArrayList();
byte[] bytes = Base64Util.bitmap2Bytes(bmp, Bitmap.CompressFormat.PNG);
String encodeImg = Base64Util.encode(bytes);
map.put("image", encodeImg);//總數(shù)據(jù)大小應(yīng)小于10M
map.put("face_field","face_liveness,thresholds,quality,gender,age,face_type");
map.put("image_type","BASE64");
list.add(map);
try {
String param = GsonUtils.toJson(list);
// 注意這里僅為了簡(jiǎn)化編碼每一次請(qǐng)求都去獲取access_token,線(xiàn)上環(huán)境access_token有過(guò)期時(shí)間清酥, 客戶(hù)端可自行緩存扶镀,過(guò)期后重新獲取。
String accessToken = AuthService.getAuth("kSxIGaaTKu9NlV2gxEI8GvoF","VoYRYgIukv6fYUoZYqoVwfUDhKTpQ4WW");
String result = HttpUtil.post(url, accessToken,"application/json", param);
System.out.println(result);
return result;
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
圖片轉(zhuǎn)字節(jié)碼:
public static byte[] bitmap2Bytes(Bitmap bitmap, Bitmap.CompressFormat format) {
ByteArrayOutputStream baos =new ByteArrayOutputStream();
bitmap.compress(format,100, baos);
return baos.toByteArray();
}
原來(lái)先放到list里面在放到map里面就可以了焰轻,這了也是花了幾個(gè)小時(shí)臭觉,唉,平時(shí)太菜的緣故吧辱志。
下面是我用圖片和真人請(qǐng)求的返回值:
真人:{"error_code":0,"error_msg":"SUCCESS","log_id":510175652579,"timestamp":1541496726,"cached":0,"result":{"thresholds":{"frr_1e-4":0.05,"frr_1e-3":0.3,"frr_1e-2":0.9},"face_liveness":0.9999917365,
圖片:"result":{"thresholds":{"frr_1e-4":0.05,"frr_1e-3":0.3,"frr_1e-2":0.9},"face_liveness":0.9205907483,"
其實(shí)蝠筑,在APIService設(shè)置了請(qǐng)求參數(shù),就可以無(wú)需在請(qǐng)求此接口達(dá)到活體檢測(cè)目的揩懒。
params.setQualityControl("NORMAL");
params.setLivenessControl("HIGH");
4.另外百度sdk的so庫(kù)提供的是三個(gè)平臺(tái)的什乙,建議你的項(xiàng)目只編譯'armeabi-v7a'平臺(tái)即可,否則增加你的項(xiàng)目幾倍大已球,整個(gè)集成后大概多出6.5M吧還能接受臣镣。在你的app的build.grald 文件defaultConfig{}中
ndk {
//設(shè)置支持的SO庫(kù)架構(gòu)
abiFilters'armeabi-v7a'// , 'armeabi-v7a', 'arm64-v8a',armeabi
}
最后待解決問(wèn)題:
在我們的項(xiàng)目中現(xiàn)在bugly反饋日志有如下報(bào)錯(cuò)辅愿,每天有少量報(bào)錯(cuò)日志,有顯示后臺(tái)和前臺(tái)的忆某,我在幾個(gè)真機(jī)上是問(wèn)起沒(méi)問(wèn)題的点待,不知道用戶(hù)是手機(jī)硬件什么原因,提交工單客服回復(fù)說(shuō)只能拿到報(bào)錯(cuò)手機(jī)運(yùn)行官方demo才能說(shuō)明問(wèn)題弃舒,所有目前沒(méi)有找出原因癞埠。歡迎留言評(píng)論指正,有大佬有解決辦法可以私信告知哦聋呢。
14165 java.lang.Error
miscalculated data length!
com.baidu.aip.baidufacedemo.utils.Base64.decode(Base64.java:68)
好啦苗踪,關(guān)于百度人臉識(shí)別集成問(wèn)題就大功告成啦,有什么問(wèn)題歡迎指正私聊削锰。
光寫(xiě)文章沒(méi)有福利怎么可能通铲,那是永遠(yuǎn)都不可能的啦。
1.公眾號(hào):推薦兩個(gè)郭霖喂窟,鴻洋测暗,微信搜索其名字即可。這兩位都是知名博客大佬磨澡,但是關(guān)注公眾號(hào)可以每天在打發(fā)早上坐地鐵時(shí)間就吸收一波干貨了碗啄,一舉兩得有木有。當(dāng)然我知道在地鐵里你只會(huì)關(guān)注美女的哈哈稳摄。稚字。
2.Android 安卓UI 庫(kù)集合推薦:當(dāng)你的產(chǎn)品經(jīng)理需要你自定義根據(jù)心情改變手機(jī)主題顏色的時(shí)候,你就應(yīng)該想到到這里找找輪子了厦酬,收藏吧胆描,騷年。
http://www.reibang.com/p/da1ca645b95c
3.工具類(lèi)RxTools推薦:普通app幾乎大部分工具類(lèi)仗阅,有這個(gè)夠用了昌讲。GitHub上7千+收藏量了。
https://github.com/vondear/RxTool
4.安卓博客門(mén)戶(hù):除了apkbus减噪,掘金短绸,簡(jiǎn)書(shū),codekk也不錯(cuò)http://p.codekk.com/筹裕,鴻洋的玩安卓:http://www.wanandroid.com/
5.程序員的導(dǎo)航之家:極客導(dǎo)航醋闭,分類(lèi)了你幾乎想要了解的網(wǎng)址門(mén)戶(hù)
5.阿里矢量icon圖庫(kù):有了這個(gè)你是不是可以和ui妹子多交流交流呢哈哈
得到全平臺(tái)付費(fèi)內(nèi)容打包帶走(共4T 含音頻+圖片及直播內(nèi)容視頻等)
[我的小店進(jìn)店鏈接]:dedaofree.taobao.com
淘口令:【混沌大大學(xué)堂王東岳創(chuàng)新院研習(xí)社商學(xué)院創(chuàng)業(yè)營(yíng)創(chuàng)投營(yíng)包更新】https://m.tb.cn/h.3NTTSIi 點(diǎn)擊鏈接,再選擇瀏覽器咑閞朝卒;或復(fù)·制這段描述¥Sgk7bPooUrp¥后到淘♂寳♀
你以為送完免費(fèi)東東就完了证逻,是不是還意猶未盡?沒(méi)錯(cuò)抗斤,我必須給大伙點(diǎn)看家家當(dāng)了囚企,我本人收集了得到APP上面所有的付費(fèi)內(nèi)容丈咐,沒(méi)錯(cuò),不要問(wèn)全不全洞拨,什么付費(fèi)訂閱課扯罐,大師課統(tǒng)統(tǒng)都有负拟。我現(xiàn)在自己就每天都在聽(tīng)烦衣,很方便,路上在家有空的時(shí)候插上耳機(jī)收聽(tīng)就行了掩浙。感覺(jué)自己每天都有無(wú)形的收獲花吟!
做程序員這么多年,一輩子敲代碼是不可能的厨姚,永遠(yuǎn)都不可能的衅澈。這會(huì)是程序員通往產(chǎn)品經(jīng)理,程序員通往管理高層的成功必經(jīng)之路谬墙!
比如說(shuō)梁寧產(chǎn)品思維三十講今布,寧向東的清華管理學(xué)等等,得到平臺(tái)如果您不了解拭抬,你可以現(xiàn)在立刻馬上電子市場(chǎng)下載部默,它上面的付費(fèi)內(nèi)容含金量個(gè)人覺(jué)得數(shù)一數(shù)二了!
上面的大師級(jí)別的課都上99 造虎,199起步的傅蹂,現(xiàn)在我這里拿去,僅99元全部打包帶走算凿,加微信購(gòu)買(mǎi)發(fā)百度云鏈接永久保存到您自己網(wǎng)盤(pán)份蝴!現(xiàn)在憑這篇文章截圖可以送喜馬拉雅全平臺(tái)2017,2018付費(fèi)音頻!
![太多了不截圖了4.5T左右
一輩子敲代碼是不可能的氓轰,我覺(jué)得我們程序員要獲取的知識(shí)面應(yīng)該更寬更廣婚夫,得到平臺(tái)上的內(nèi)容很多就很符合,轉(zhuǎn)型其他崗位署鸡,行業(yè)案糙,但是機(jī)會(huì)總是留給做好準(zhǔn)備的人!所以抓緊學(xué)習(xí)吧储玫,趁還年輕侍筛!2018年定價(jià)99元,2019年錯(cuò)過(guò)這個(gè)村就就沒(méi)這個(gè)價(jià)啦撒穷。
如果您擔(dān)心音質(zhì)問(wèn)題匣椰,那是完全多余了,您可以5元視聽(tīng)一個(gè)欄目端礼,不是百分百原音質(zhì)退全額禽笑。
另外有騰訊課堂著名的動(dòng)腦學(xué)院Android VIP全套課程視頻源碼(大概2T入录,高清原畫(huà)質(zhì)),價(jià)值6888元佳镜,不了解的可騰訊課堂搜Android課程排名第一的長(zhǎng)沙--動(dòng)腦學(xué)院僚稿,你官方報(bào)名同樣很多時(shí)候是看視頻的,講師講課很仔細(xì)蟀伸,有源碼demo蚀同,我這里白菜價(jià)拿走不謝,看完這套視頻啊掏,工資上漲3-8k不在話(huà)下蠢络!高級(jí)安卓進(jìn)階必會(huì)技術(shù)需要的微信聯(lián)系這里不私聊。
我的微信號(hào)(購(gòu)買(mǎi)加微信必須注明簡(jiǎn)書(shū)得到):together13ly14
加我注明:簡(jiǎn)書(shū)
最后:如果你對(duì)我發(fā)知識(shí)沒(méi)有欲望迟蜜,喜歡吃喝玩樂(lè)旅行刹孔?我可以給你推薦個(gè)旅行公眾號(hào),微信搜:廣州小青蛙旅行網(wǎng)娜睛,那里都是一些上班白領(lǐng)周末純玩路線(xiàn)髓霞,主打年輕人社交旅行,多數(shù)都是廣州集合出發(fā)的畦戒,也有匯集到目的地集合出發(fā)的方库。一百多塊錢(qián)就可以玩好,報(bào)名后屏這里截圖同樣可以減免20元優(yōu)惠不等兢交。直接微信或電話(huà)咨詢(xún)報(bào)名即可薪捍!還可以找到未來(lái)的女朋友,想想都開(kāi)心配喳,哈哈