Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Wantedly Peopleのスキャン画面の裏側 / Wantedly People Sca...
Search
Shinichi Goto
May 31, 2017
Technology
6
6.5k
Wantedly Peopleのスキャン画面の裏側 / Wantedly People Scanning Screen
2017/05/31 Wantedly技術見学会 iOS編
Shinichi Goto
May 31, 2017
Tweet
Share
More Decks by Shinichi Goto
See All by Shinichi Goto
WWDC18 ML Overview
_shingt
1
1.4k
Core ML 🏃 iOS Engineer
_shingt
1
620
Core ML / Vision Frameworkを使ってできること / What can we achieve using Core ML and Vision framework
_shingt
3
4.5k
Providing Better Feedback in Real-time Object Detection Apps
_shingt
2
1.6k
Value Types in WWDC16
_shingt
3
2.6k
debug-remote-local-notification-on-watchos
_shingt
0
11k
Server Side Swift question
_shingt
3
1.1k
Other Decks in Technology
See All in Technology
What happened to RubyGems and what can we learn?
mikemcquaid
0
300
CDK対応したAWS DevOps Agentを試そう_20260201
masakiokuda
1
320
配列に見る bash と zsh の違い
kazzpapa3
3
160
SREのプラクティスを用いた3領域同時 マネジメントへの挑戦 〜SRE・情シス・セキュリティを統合した チーム運営術〜
coconala_engineer
2
660
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
230
顧客の言葉を、そのまま信じない勇気
yamatai1212
1
360
登壇駆動学習のすすめ — CfPのネタの見つけ方と書くときに意識していること
bicstone
3
110
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
210
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1k
SRE Enabling戦記 - 急成長する組織にSREを浸透させる戦いの歴史
markie1009
0
120
Ruby版 JSXのRuxが気になる
sansantech
PRO
0
160
Greatest Disaster Hits in Web Performance
guaca
0
260
Featured
See All Featured
Writing Fast Ruby
sferik
630
62k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
1
53
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
100
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Everyday Curiosity
cassininazir
0
130
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
220
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
250
Docker and Python
trallard
47
3.7k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.8k
Building Applications with DynamoDB
mza
96
6.9k
Site-Speed That Sticks
csswizardry
13
1.1k
Transcript
Wantedly Peopleͷ εΩϟϯը໘ͷཪଆ ɹ 2017/05/31 Wantedlyٕज़ݟֶձ iOSฤ shingt (Shinichi Goto)
@ Wantedly, Inc.
shingt (Shinichi Goto) GitHub: @shingt Twi5er: @_shingt
None
None
Outline • εΩϟϯը໘ͷॲཧͷྲྀΕ • ٕज़ཁૉ / ߏ • ෆ҆ఆͳݕग़݁Ռͷରॲ •
σόοά൛ͷ
εΩϟϯը໘ͷॲཧͷྲྀΕ
None
None
None
None
None
None
None
None
None
None
ٕज़ཁૉ / ߏ
• AVFounda*on • OpenCV • ίϯϐϡʔλϏδϣϯ༻ͷϥΠϒϥϦ • ໊ྖҬͷݕग़ɺͦͷଞը૾ॲཧʹར༻ • ಛผͳͷ͍ͬͯͳ͍
໊ݕग़ͷOpenCVҎ֎ͷબࢶ • CoreImage • Accerelate (BNNS) • Metal (CNN) •
TensorFlow
ݕग़ϩδοΫAndroidͱڞ௨Խ͍ͨ͠ ʢগͳ͘ͱॳظϦϦʔεͰʣ
=> Accerelate / Metal / CoreImage ݟૹΓ ʢલऀ2ͭiOS9Ͱར༻Ͱ͖ͳ͍ʣ
TensorFlow • ΞϓϦʹΈࠐΈɺผ్ֶशࡁͷϞσϧΛద༻ɺͱ͍͏ͱ͜Ζ ·Ͱࢼͨ͠ • ໊ݕग़෦ͷ࣮ࡍͷ׆༻ʹࢸΒͣ • ։ൃظؒɺσʔληοτɺਫ਼ͷ
༨ஊ: Google I/O '17 pod 'TensorFlow-experimental' ɹ • Android Meets
TensorFlow: How to Accelerate Your App with AI • "experimental" Ͱͳ͍ํ "Coming soon" ͱͳͬͯΔ • h?ps:/ /cocoapods.org/pods/TensorFlow
ߏ
ɹ • OpenCV • C++Ͱهड़͞ΕͨΠϯλʔϑΣΠεΛར༻ • => Swi/͔Βͷͷݺͼग़͠ෆՄ • ʢඞવతʹʣݕग़ؔ࿈ͷϩδοΫObjec3ve-C++ଆʹدͤΔ
None
// CardDetector.mm - (NSArray<CardFeature *> *)cardFeaturesInMat:(const cv::Mat &)mat { std::vector<dtct::Card>
cards = ... // Detect cards on C++ layer NSMutableArray<CardFeature *> *cardFeatures = [NSMutableArray array]; for (const auto& card : cards) { if (!card.is_namecard) continue; CardFeature *cardFeature = [[CardFeature alloc] initWithDTCTCard:card]; [cardFeatures addObject:cardFeature]; } return cardFeatures; }
CardDetector • C++ͷϨΠϠͷProxyʹ͍ۙҐஔ • ࣮ࡍʹ͋Δఔը૾ॲཧϩδοΫؚΉ • ࠲ඪิਖ਼ɺಁࢹมɺetc. • σόΠεଆͰಈ͔ͯ͠ΈͯॳΊͯݟ͔ͭΔɺͱ͍͏͋ͬ ͨͨΊ
C++ͷϨΠϠ • Γग़ͯ͠։ൃ & ୯ಠͰϏϧυ • ΞϓϦશମΛϏϧυ͢Δͷʹൺͯѹతʹ͍ͨΊ • ݕग़෦ͷϩδοΫΛվળ͍͢͠ʢͬͱجຊతͳ෦ PythonͰ࣮ݧʣ
• దٓiOSϓϩδΣΫτऔΓࠐΈ
ෆ҆ఆͳݕग़݁Ռͷରॲ
໊ྖҬͷݕग़
AVCaptureStillImageOutput ʢ੩ࢭը༻ʣ OR AVCaptureVideoDataOutputʢಈը༻ʣ
໊εΩϟϯʹγϟολʔԻ໐Βͨ͘͠ͳ͍ => AVCaptureVideoDataOutput
: iPhone༳ΕΔ
=> ϒϨΔ
None
ղܾࡦ: γʔέϯεͱͯ͠ѻ͏
None
None
None
None
ݕग़݁Ռͷථ • ϑϨʔϜͷ໌ʢͲΕ͚ͩϒϨ͍ͯͳ͍͔ʣ • ϥϓϥγΞϯϑΟϧλΛ͔͚ͨ݁ՌͷࢄʢͰ͋ΔఔݟΕ Δʣ • ݕग़໊ຕ • ͲΕ͚ͩۙͷϑϨʔϜ͔
ࢀߟ: ໌ͷԋࢉ @implementation UIImage (CVExtension) - (double)sharpness { cv::Mat mat,
gray, laplacian; UIImageToMat(self, mat); cv::cvtColor(mat, gray, CV_BGR2GRAY); cv::Laplacian(gray, laplacian, CV_64F); cv::Scalar mean, stddev; cv::meanStdDev(laplacian, mean, stddev, cv::Mat()); return stddev.val[0] * stddev.val[0]; } @end
None
None
τϥοΩϯά࣌
None
None
None
ɹ • ݁ߏ҆ͳղܾࡦͰ͋Δ • ͱ͍͑ܶతʹମݧ্ !
σόοά൛ͷ
ϦΞϧλΠϜͳը૾ॲཧΞϓϦͷ։ൃͰࠔΔ͜ͱ • ൃੜ࣌ɺݱঢ়Ѳʹ͕͔͔࣌ؒΓ͍͢ • ϓϩηεͷͲͷ෦͕ѱ͍ͷ͔ • ઢݕग़ʁ࠲ඪมʁ໌ͷԋࢉʁ
Debug, QAͰ • ԋࢉঢ়گɺϦιʔεঢ়گΛදࣔ • ໌, γʔέϯεॲཧ, CPU, etc. •
ը૾ॲཧͷաఔΛදࣔ
None
None
None
ɹ • ࢹ֮తʹ͔Γ͍ͨ͢ΊΛݟ͚͍ͭ͢ • ͍͚ͦ͏ײ͕CEOʹΘΔ
·ͱΊ • εΩϟϯը໘ͷॲཧͷྲྀΕ / ٕज़ཁૉ / ߏ Λհ • ෆ҆ఆͳݕग़݁Ռͷରॲ
=> γʔέϯεຖʹॲཧ • "ΊͪΌͪ͘ΌεϚʔτʂ" ͳ͜ͱͯ͠ͳ͍ʢݱঢ়ʣ • Debug/QA൛ͰॲཧաఔɺϦιʔεঢ়گΛग़͓ͯ͘͠ • ΓޙBlogͰެ։ʢ͢Δ͔ʣ
Thanks!