nan_scan 是一款支持iOS和android 的掃碼器插件,支持用戶自定義頁面
10年的漢陽網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調整漢陽建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“漢陽網站設計”,“漢陽網站推廣”以來,每個客戶項目都認真落實執(zhí)行。
1、配置:
android配置:在AndroidManifest.xml 下添加相機權限?uses-permission android:name="android.permission.CAMERA" /
iOS:在打開xcode,在info.plist 下添加 Privacy - Camera Usage Description ,打開相機權限
2、使用:
引入插件:在pubspec.yaml 中,
dependencies:
???nan_scan: 版本號
使用案例方法:
或者:
demo效果圖:
在通往人工智能的路上,Google一直在不停地買買買。而且Google在人工智能領域的收購其實從2006年就開始了。
DeepMind(2014年1月26日被Google收購)
Deepmind可以說是當下最火的人工智能初創(chuàng)公司,于2014年1月26日被Google收購。
雖然被谷歌收購,但是DeepMind一直是獨立運營的,他們的目標是開發(fā)能夠“獨立思考”的軟件。為了能夠開發(fā)這種類型的人工智能軟件,DeepMind在海量數(shù)據(jù)集合的幫助下使用機器學習等技術訓練自己的人工智能去完成某些工作任務。
api.ai(2016年9月19日被Google收購)
api.ai的API可以透過語音辨識、意圖辨識和上下文語境理解等技術,讓電腦理解人類語言并轉換為行動,協(xié)助開發(fā)者打造類似Siri的對話式智慧助理,可用于聊天機器人、App、智慧家電等。
api.ai已經證明他們可以協(xié)助開發(fā)者設計、開發(fā)和不斷改進會話式界面。超過6萬名開發(fā)者正使用API.ai的工具開發(fā)會話式體驗。api.ai提供了業(yè)界領先的會話式用戶界面平臺,能夠協(xié)助谷歌指導開發(fā)者持續(xù)開發(fā)優(yōu)秀的自然語言界面。
Moodstocks(2016年7月6日被Google收購)
Moodstocks公司成立于2008年,作為一個小的創(chuàng)業(yè)公司,他們的規(guī)模并不大。
Moodstocks公司是以圖像識別技術為主,并推出了智能手機的圖像識別應用程序Moodstocks Notes。在加入谷歌在巴黎的研發(fā)團隊之后,他們將繼續(xù)研發(fā)自己的視覺圖像識別工具。
Dark Blue Labs(2014年10月23日被Google收購)
Dark Blue Labs是一家深度學習公司,主要從事數(shù)據(jù)架構以及算法開發(fā)工作,被收購后并入DeepMind。
Jetpac(2014年8月17日被Google收購)
總部位于舊金山的Jetpac通過Instagram等社交圖片分享工具制作城市導游服務。通過分析食品、裝飾和人物圖片,Jetpac的軟件便可對城市的各種特點進行分析。
Jetpac被收購前有三款智能手機應用,包括一款城市導游助手、一款圖片分析器和一款圖片探測工具,被收購后并入Picasa中。
Emu(2014年8月6日被Google收購)
Emu是一個類似語音助手Siri但卻是“通過文本消息服務的內置助手”。
它整合了類似Siri個人助理的功能,將會根據(jù)你的聊天記錄,自動執(zhí)行移動助理的任務。比如自動建立日程、設置時間提醒、甚至還能幫你預定餐館。
Emu被Google收購后主要用于Google Hangouts以及Google Now中。
Flutter(2013年10月2日被Google收購)
Flutter2010年底由Navneet Dalal和Mehul Nariyawala創(chuàng)辦,利用計算機視覺技術結合手勢監(jiān)測識別技術,使得用戶可以用簡單的手勢來操控電腦和移動設備。
Flutter被Google收購后主要應用在Android以及Google X項目中。
Wavii(2013年4月23日被Google收購)
Wavii是一家成立于2009年3月的自然語言處理技術公司,總部位于西雅圖。
Wavii主要做的是掃描網絡、尋找新聞、然后進行總結,并附上文章來源的全文鏈接。
Wavii被Google收購后主要應用在Google Knowledge Graph(Google知識圖譜)中。
DNNresearch(2013年3月12日被Google收購)
DNNresearch公司是由深度學習大神Geoffrey Hinton與他的兩個研究生Alex Krizhevsky和Ilya Sutskever成立。由于谷歌在本次收購中沒有獲得任何實際的產品或服務,所以本次收購實際上屬于人才性收購,收購的主體是為了這三人團隊。
Viewdle(2012年10月1日被Google收購)
Viewdle是一家成立于2006年的烏克蘭公司,被收購前主要做的是增強現(xiàn)實和面部識別。
Viewdle曾經推出的應用包括SocialCamera和Third Eye,Social Camera是其推出的首款應用,用戶只需通過Faceprint教會你的相機識別好友,此后只要照片中出現(xiàn)了這些好友,SocialCamera就可以自動為他們打上標簽。
Viewdle被Google收購后主要應用在Android中。
Clever Sense(2011年12月13日被Google收購)
Clever Sense是本地推薦應用Alfred的開發(fā)商。Alfred的獨特之處在于它將人工智能和機器算法有機結合,為用戶提供個性化的場所推薦,推薦的場所包括附近的餐館、咖啡廳、酒吧和夜店。
Clever Sense被Google收購后主要應用在Android中。
PittPatt(2011年7月23日被Google收購)
PittPatt是一家由卡耐基梅隆大學孵化的專注于人臉識別和模式識別公司,其開發(fā)了一項能在照片、視頻和其他媒介之中識別匹配人臉的技術,創(chuàng)造了一系列人臉檢測、跟蹤和識別的算法。
PittPatt的人臉檢測和跟蹤的軟件開發(fā)工具包(SDK)能在照片中確定人臉的位置,在視頻中跟蹤人臉的移動情況。
PittPatt被Google收購后主要應用在Android中。
SayNow(2011年1月25日被Google收購)
SayNow是一家成立于2005年的語音識別公司,總部位于美國加州帕羅奧托(Palo Alto)市。
SayNow的平臺可將語音通訊、一對一通話和集團通話整合到Facebook和Twitter等社交網站,以及Android和iPhone手機應用中。
SayNow被Google收購后主要應用在Google Voice中。
Phonetic Arts(2010年12月3日被Google收購)
Phonetic Arts公司是一家位于英國的語音合成技術廠商。被Google收購前Phonetic Arts公司的語音合成技術主要用在游戲中,但谷歌希望將該技術用于其電腦聲音自動輸出系統(tǒng),以使機器合成的人聲更像人類的聲音以及更加流利。
Phonetic Arts被Google收購后主要應用在Google Voice和Google Translate中。
Metaweb(2010年7月16日被Google收購)
Metaweb是一家從事語義搜索(Semantic Search)技術開發(fā)的風險企業(yè),目標是開發(fā)用于Web的語義數(shù)據(jù)存儲的基礎結構。
Metaweb被Google收購后主要應用在Google Search中。
Neven Vision(2006年8月15日被Google收購)
這個可以說是Google最早在人工智能領域的收購了,可以追溯到2006年。
Neven Vision是一家圖像識別技術公司,其能自動從圖片里提取信息、并且辨認圖片的內容,被收購前主要應用于手機以及美國政府和執(zhí)法部門的計量生物學應用中。
Neven Vision被Google收購后主要應用在Picasa以及Google Goggles中。
相機像素低。
在桌面端研發(fā)工作臺的開發(fā)中,我們使用的是FlutterDesktop技術至于原因,技術調研部分會講,國內目前FlutterDesktop技術在生產環(huán)境落地的并不多,相關經驗還比較缺乏,遇到一些問題的時候,需要自己去探索解決。
接下來我們就來看一看我們?yōu)榱私鉀Q這些問題,在iBox上設計了哪些核心的功能,以及這些功能是如何解決這些問題的。
iphone11相機為什么只能放大5倍??
程序鵝 ?
碼齡5年
關注
在做掃碼需求,往往會有放大鏡頭需求。
蘋果提供了AVCaptureConnection中,videoScaleAndCropFactor:縮放裁剪系數(shù),使用該屬性,可以實現(xiàn)拉近拉遠鏡頭。再結合手勢UIPinchGestureRecognizer,就很簡單實現(xiàn)手勢拉近拉遠鏡頭。
手勢代碼
///記錄開始的縮放比例
@property(nonatomic,assign)CGFloat beginGestureScale;
///最后的縮放比例
@property(nonatomic,assign)CGFloat effectiveScale;
- (void)cameraInitOver
{
if (self.isVideoZoom) {
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchDetected:)];
pinch.delegate = self;
[self.view addGestureRecognizer:pinch];
}
}
- (void)pinchDetected:(UIPinchGestureRecognizer*)recogniser
{
self.effectiveScale = self.beginGestureScale * recogniser.scale;
if (self.effectiveScale 1.0){
self.effectiveScale = 1.0;
}
[self.scanObj setVideoScale:self.effectiveScale];
}
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if ( [gestureRecognizer isKindOfClass:[UIPinchGestureRecognizer class]] ) {
_beginGestureScale = _effectiveScale;
}
return YES;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
拉近拉遠鏡頭代碼
- (void)setVideoScale:(CGFloat)scale
{
[_input.device lockForConfiguration:nil];
AVCaptureConnection *videoConnection = [self connectionWithMediaType:AVMediaTypeVideo fromConnections:[[self stillImageOutput] connections]];
CGFloat maxScaleAndCropFactor = ([[self.stillImageOutput connectionWithMediaType:AVMediaTypeVideo] videoMaxScaleAndCropFactor])/16;
if (scale maxScaleAndCropFactor)
scale = maxScaleAndCropFactor;
CGFloat zoom = scale / videoConnection.videoScaleAndCropFactor;
videoConnection.videoScaleAndCropFactor = scale;
[_input.device unlockForConfiguration];
CGAffineTransform transform = _videoPreView.transform;
[CATransaction begin];
[CATransaction setAnimationDuration:.025];
_videoPreView.transform = CGAffineTransformScale(transform, zoom, zoom);
[CATransaction commit];
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
有一點需要注意:the videoScaleAndCropFactor property may be set to a value in the range of 1.0 to videoMaxScaleAndCropFactor,videoScaleAndCropFactor這個屬性取值范圍是1.0-videoMaxScaleAndCropFactor,如果你設置超出范圍會崩潰哦!
iOS 模仿微信掃描二維碼放大功能
我們知道,微信掃描二維碼過程中,如果二維碼圖片焦距比較遠,會拉近焦距,實現(xiàn)放大功能。這種效果如何該實現(xiàn),用原生的API又是如何實現(xiàn)。本文簡單嘗試如何使用AVFoundation實現(xiàn)放大二維碼圖片。重點是如何定位二維碼和放大二維碼,前面介紹了 iOS 掃描二維碼實現(xiàn)手勢拉近拉遠鏡頭 iOS 識別過程中描繪二維碼邊框 和iOS 識別過程中描繪二維碼邊框 ,我們可以很簡單的實現(xiàn)二維碼定位和放大。 ...
APP打開
Android代碼-Flutter實現(xiàn)的二維碼掃描。
flutter_mobile_vision Flutter implementation for Google Mobile Vision. Based on Google Mobile Vision
APP打開
掃描二維碼研究總結(高仿微信掃一掃,輕松實現(xiàn)定制掃描界面)
在正文之前說點題外話,加上這篇我已經寫了3篇博客了,其實我寫博客的初衷不是想證明自己有多牛,并且我也只是從事安卓開發(fā)只有半年時間的小渣,但是不想成為大牛的渣不是好渣,所以我想通過博客把工作學習中遇到的問題進行研究總結,從而提高自己,與此同時如果能給廣大從事安卓開發(fā)的朋友們提供幫助或者是提供一點點思路我也是很心滿意足了!~~好了,廢話不多少進入正題吧! 先上界面圖。由于目前不會錄屏,所以直接上截圖...
APP打開
ios 掃描二維碼實現(xiàn)自動放大和手勢雙擊放
在以前的 《Flutter 上默認的文本和字體知識點》 和 《帶你深入理解 Flutter 中的字體“冷”知識》 中,已經介紹了很多 Flutter 上關于字體有趣的知識點,而本篇講繼續(xù)介紹 Flutter 上關于 Text 的一個屬性: FontFeature , 事實上相較于 Flutter ,本篇內容可能和前端或者設計關系更密切 。
什么是 FontFeature ? 簡單來說就是影響字體形狀的一個屬性 ,在前端的對應領域里應該是 font-feature-settings ,它有別于 FontFamily ,是用于指定字體內字的形狀的一個參數(shù)。
我們知道 Flutter 默認在 Android 上使用的是 Roboto 字體,而在 iOS 上使用的是 SF 字體,但是其實 Roboto 字體也是分很多類型的,比如你去查閱手機的 system/fonts 目錄,就會發(fā)現(xiàn)很多帶有 Roboto 字樣的字體庫存在。
所以 Roboto 之類的字體庫是一個很大的字體集,不同的 font-weight 其實對應著不同的 ttf ,例如默認情況下的 Roboto 是不支持 font-weight 為 600 的配置 :
所以如下圖所示,如果我們設置了 w400 - w700 的 weight ,可以很明顯看到中間的 500 和 600 其實是一樣的粗細,所以在 設置 weight 或者設計 UI 時,就需要考慮不同平臺上的 weight 是否支持想要的效果 。
回歸到 FontFeature 上,那 Roboto 自己默認支持多少種 features 呢? 答案是 26 種,它們的編碼如下所示,運行后效果也如下圖所示,從日常使用上看,這 26 種 Feature 基本滿足開發(fā)的大部分需求。
而 iOS 上的 SF pro 默認支持 39 種 Features , 它們的編碼如下所示,運行后效果也如下圖所示,可以看到 SF pro 支持的 Features 更多。
所以可以看到,并不是所有字體支持的 Features 都是一樣的,比如 iOS 上支持 sups 上標顯示和 subs 下標顯示,但是 Android 上的 Roboto 并不支持,甚至很多第三方字體其實并不支持 Features 。
有趣的是,在 Flutter Web 有一個渲染文本時會變模糊的問題 #58159 ,這個問題目前官方還沒有修復,但是你可以通過給 Text 設置任意 FontFeatures 來解決這個問題。
最后,如果對 FontFeature 還感興趣的朋友,可以通過一下資料深入了解,如果你還有什么關于字體上的問題,歡迎留言討論。
基于網友的問題再補充一下拓展知識,畢竟這方面內容也不多 。
事實上在 dart 里就可以看到對應 FontWeight 約定俗稱用的是字體集里的什么字體:
所以如果對于默認字體有疑問,可以在你的手機字體找找是否有對應的字體, 比如雖然我們說 roboto 沒有 600 ,但是如果是 roboto mono 字體集是有 600 的 fontweight ,甚至還有 600 斜體: 。
另外注意這是 Flutter 而不是原生,具體實現(xiàn)調用是在 Engine 的 paragraph_skia.cc 和 paragraph_builder_skia.cc 下對應的 setFontFamilies 相關邏輯,當然默認字體庫指定在 typography.dart 下就看到,例如 'Roboto' 、 '.SF UI Display' 、 '.SF UI Text' 、 '.AppleSystemUIFont' 、 'Segoe UI' :
另外如果你在 Mac 的 Web 上使用 Flutter Web,可以看到指定的是 .AppleSystemUIFont ,而對于 .AppleSystemUIFont 它其實不算是一種字體,而是蘋果上字體的一種集合別稱:
[圖片上傳失敗...(image-40f5ce-1648368234737)]
還有,如果你去看 Flutter 默認自帶的 cupertino/context_menu_action.dart ,就可以看到一個有趣的情況:
當然,前面我們說了那么多,主要是針對英文的情況下,而在中文下還是有差異的 ,之前的文章也介紹過:
例如,在蘋果上的簡體中文其實會是 PingFang SC 字體,對應還有 PingFang TC 和 PingFang HK 的繁體集,而關于這個問題在 Flutter 上之前還出現(xiàn)過比較有意思的 bug :
當然后續(xù)的 #16709 修復了這個問題 ,而在以前的文章我也講過,當時我遇到了 “Flutter 在 iOS 系統(tǒng)上,系統(tǒng)語言是韓文時,在和中文一起出現(xiàn)會導致字體顯示異常" 的問題 :
解決方法也很簡單,就是給 fontFamilyFallback 配置上 ["PingFang SC" , "Heiti SC"] 就可以了,這是因為韓文在蘋果手機上使用的應該是 Apple SD Gothic Neo 這樣的超集字體庫,【廣】這個字符在這個字體集上是不存在的,所以就變成了中文的【廣】;
所以可以看到,字體相關是一個平時很少會深入接觸的東西,但是一旦涉及多語言和繪制,就很容易碰到問題的領域 。