Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Wantedly Peopleのスキャン画面の裏側 / Wantedly People Scanning Screen

Wantedly Peopleのスキャン画面の裏側 / Wantedly People Scanning Screen

2017/05/31 Wantedly技術見学会 iOS編

Shinichi Goto

May 31, 2017
Tweet

More Decks by Shinichi Goto

Other Decks in Technology

Transcript

  1. Wantedly Peopleͷ
    εΩϟϯը໘ͷཪଆ
    ɹ
    2017/05/31 Wantedlyٕज़ݟֶձ iOSฤ
    shingt (Shinichi Goto) @ Wantedly, Inc.

    View Slide

  2. shingt (Shinichi Goto)
    GitHub: @shingt
    Twi5er: @_shingt

    View Slide

  3. View Slide

  4. View Slide

  5. Outline
    • εΩϟϯը໘ͷॲཧͷྲྀΕ
    • ٕज़ཁૉ / ߏ੒
    • ෆ҆ఆͳݕग़݁Ռ΁ͷରॲ
    • σόοά൛ͷ࿩

    View Slide

  6. εΩϟϯը໘ͷॲཧͷྲྀΕ

    View Slide

  7. View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. View Slide

  12. View Slide

  13. View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. ٕज़ཁૉ / ߏ੒

    View Slide

  18. • AVFounda*on
    • OpenCV
    • ίϯϐϡʔλϏδϣϯ༻ͷϥΠϒϥϦ
    • ໊ࢗྖҬͷݕग़ɺͦͷଞը૾ॲཧʹར༻
    • ಛผͳ΋ͷ͸࢖͍ͬͯͳ͍

    View Slide

  19. ໊ࢗݕग़ͷOpenCVҎ֎ͷબ୒ࢶ
    • CoreImage
    • Accerelate (BNNS)
    • Metal (CNN)
    • TensorFlow

    View Slide

  20. ݕग़ϩδοΫ͸Androidͱڞ௨Խ͍ͨ͠
    ʢগͳ͘ͱ΋ॳظϦϦʔεͰ͸ʣ

    View Slide

  21. => Accerelate / Metal / CoreImage ͸ݟૹΓ
    ʢલऀ2ͭ͸iOS9Ͱར༻Ͱ͖ͳ͍໰୊΋ʣ

    View Slide

  22. TensorFlow
    • ΞϓϦʹ૊ΈࠐΈɺผ్ֶशࡁͷϞσϧΛద༻ɺͱ͍͏ͱ͜Ζ
    ·Ͱ͸ࢼͨ͠
    • ໊ࢗݕग़෦෼΁ͷ࣮ࡍͷ׆༻ʹ͸ࢸΒͣ
    • ։ൃظؒɺσʔληοτɺਫ਼౓ͷ໰୊

    View Slide

  23. ༨ஊ: 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

    View Slide

  24. ߏ੒

    View Slide

  25. ɹ
    • OpenCV
    • C++Ͱهड़͞ΕͨΠϯλʔϑΣΠεΛར༻
    • => Swi/͔Βͷ௚઀ͷݺͼग़͠͸ෆՄ
    • ʢඞવతʹʣݕग़ؔ࿈ͷϩδοΫ͸Objec3ve-C++ଆʹدͤΔ

    View Slide

  26. View Slide

  27. // CardDetector.mm
    - (NSArray *)cardFeaturesInMat:(const cv::Mat &)mat
    {
    std::vector cards = ... // Detect cards on C++ layer
    NSMutableArray *cardFeatures = [NSMutableArray array];
    for (const auto& card : cards) {
    if (!card.is_namecard) continue;
    CardFeature *cardFeature = [[CardFeature alloc] initWithDTCTCard:card];
    [cardFeatures addObject:cardFeature];
    }
    return cardFeatures;
    }

    View Slide

  28. CardDetector
    • C++ͷϨΠϠ΁ͷProxyʹ͍ۙҐஔ
    • ࣮ࡍʹ͸͋Δఔ౓ը૾ॲཧϩδοΫ΋ؚΉ
    • ࠲ඪิਖ਼ɺಁࢹม׵ɺetc.
    • σόΠεଆͰಈ͔ͯ͠ΈͯॳΊͯݟ͔ͭΔɺͱ͍͏໰୊΋͋ͬ
    ͨͨΊ

    View Slide

  29. C++ͷϨΠϠ
    • ੾Γग़ͯ͠։ൃ & ୯ಠͰϏϧυ
    • ΞϓϦશମΛϏϧυ͢Δͷʹൺ΂ͯѹ౗తʹ଎͍ͨΊ
    • ݕग़෦෼ͷϩδοΫΛվળ͠΍͍͢ʢ΋ͬͱجຊతͳ෦෼͸
    PythonͰ࣮ݧʣ
    • దٓiOSϓϩδΣΫτ΁औΓࠐΈ

    View Slide

  30. ෆ҆ఆͳݕग़݁Ռ΁ͷରॲ

    View Slide

  31. ໊ࢗྖҬͷݕग़

    View Slide

  32. AVCaptureStillImageOutput ʢ੩ࢭը༻ʣ
    OR
    AVCaptureVideoDataOutputʢಈը༻ʣ

    View Slide

  33. ໊ࢗεΩϟϯʹγϟολʔԻ͸໐Βͨ͘͠ͳ͍
    => AVCaptureVideoDataOutput

    View Slide

  34. ໰୊: iPhone͸༳ΕΔ

    View Slide

  35. => ϒϨΔ

    View Slide

  36. View Slide

  37. ղܾࡦ: γʔέϯεͱͯ͠ѻ͏

    View Slide

  38. View Slide

  39. View Slide

  40. View Slide

  41. View Slide

  42. ݕग़݁Ռͷ౤ථ
    • ϑϨʔϜͷ઱໌౓ʢͲΕ͚ͩϒϨ͍ͯͳ͍͔ʣ
    • ϥϓϥγΞϯϑΟϧλΛ͔͚ͨ݁Ռͷ෼ࢄʢͰ͋Δఔ౓ݟΕ
    Δʣ
    • ݕग़໊ࢗຕ਺
    • ͲΕ͚ͩ௚ۙͷϑϨʔϜ͔

    View Slide

  43. ࢀߟ: ઱໌౓ͷԋࢉ
    @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

    View Slide

  44. View Slide

  45. View Slide

  46. τϥοΩϯά࣌

    View Slide

  47. View Slide

  48. View Slide

  49. View Slide

  50. ɹ
    • ݁ߏ҆௚ͳղܾࡦͰ͸͋Δ
    • ͱ͸͍͑ܶతʹମݧ͸޲্ !

    View Slide

  51. σόοά൛ͷ࿩

    View Slide

  52. ϦΞϧλΠϜͳը૾ॲཧΞϓϦͷ։ൃͰࠔΔ͜ͱ
    • ໰୊ൃੜ࣌ɺݱঢ়೺Ѳʹ͕͔͔࣌ؒΓ΍͍͢
    • ϓϩηεͷͲͷ෦෼͕ѱ͍ͷ͔
    • ઢ෼ݕग़ʁ࠲ඪม׵ʁ઱໌౓ͷԋࢉʁ

    View Slide

  53. Debug, QAͰ͸
    • ԋࢉঢ়گɺϦιʔεঢ়گΛදࣔ
    • ઱໌౓, γʔέϯεॲཧ, CPU, etc.
    • ը૾ॲཧͷաఔΛදࣔ

    View Slide

  54. View Slide

  55. View Slide

  56. View Slide

  57. ɹ
    • ࢹ֮తʹ෼͔Γ΍͍ͨ͢Ί໰୊Λݟ͚ͭ΍͍͢
    • ͍͚ͦ͏ײ͕CEOʹ఻ΘΔ

    View Slide

  58. ·ͱΊ
    • εΩϟϯը໘ͷॲཧͷྲྀΕ / ٕज़ཁૉ / ߏ੒ Λ঺հ
    • ෆ҆ఆͳݕग़݁Ռ΁ͷରॲ => γʔέϯεຖʹॲཧ
    • "ΊͪΌͪ͘ΌεϚʔτʂ" ͳ͜ͱ͸ͯ͠ͳ͍ʢݱঢ়͸ʣ
    • Debug/QA൛ͰॲཧաఔɺϦιʔεঢ়گΛग़͓ͯ͘͠
    • ࢒Γ͸ޙ೔BlogͰެ։ʢ͢Δ͔΋ʣ

    View Slide

  59. Thanks!

    View Slide