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

絵を読む技術 Pythonによるイラスト解析 / The Art of Reading Illustrations

Hirosaji
October 16, 2021

絵を読む技術 Pythonによるイラスト解析 / The Art of Reading Illustrations

PyCon JP 2021 (2021/10/16) @Hirosaji @Hirosaji_ez
https://2021.pycon.jp/time-table/?id=273843

=====
Title (English): The Art of Reading Pictures: Illustration Analysis in Python

Hirosaji

October 16, 2021
Tweet

More Decks by Hirosaji

Other Decks in Technology

Transcript

  1. 1PSUSBJUPGB.BO+BO.BVSJUT2VJOLIBSE ʛϝτϩϙϦλϯඒज़ؗʢ1VCMJDEPNBJOʣ ֆը Πϥετ © ͻΖ͞͡ νϟʔτ © )JSPTBKJ ଟ

    จ຺ɾ৘ใྔ গ จ຺Λগ͠ߜͬͯɺԿ͔Λઆ໌͢Δ໾ׂΛ࣋ͭΠϥετɻzͲ͜z͔Λڧௐ͠ɺzͳʹz͔Λ఻͍͑ͨ͸ͣɻ ֆࢣͷૂ͍ͱ͸ɿΠϥετͷҐஔ෇͚ ΠϥετϨʔλʔ
  2. ఻͍͑ͨετʔϦʔ΍ײ৘Λ఻͑Δը໘ઃܭ ը໘ͷܗ ˒ ओʹΩϟϯόεͷॎԣൺ ΛܾΊΔ ਓ΍෺ͷ഑ஔ ਓ΍෺ͷେ͖͞ʗ઎༗౓ Λߟ͑ͯ഑ஔ͢Δɻ ޫͱΧϝϥͷ഑ஔ ΧϝϥͷҐஔ΍޲͖ɺ

    ϨϯζͷछྨΛܾΊΔɻ ߏਤ͸ ߏਤͱ͸ ˜6OJUZ5FDIOPMPHJFT+BQBO6$- ը໘ઃܭʹඞཁͳϓϩηε͸ 6OJUZͱಉ͡ ʢϏϡʔઃఆɺΧϝϥɾޫݯɾΦϒδΣΫτͷ഑ஔʜʣ
  3. Πϥετ ߏਤ S Ұ఺ಁࢹʗ์ࣹߏਤ ͓͋Γߏਤ ΞϧϑΝϕοτߏਤ ̏෼ׂߏਤ ೔ͷؙߏਤ ର֯ઢߏਤ ໿

    xxx,xxx݅ʢx,xxඵʣ ߏਤʹ͸Ԧಓύλʔϯ͕୔ࢁ͋Δʢͨͩ͠ະ੔ཧʣ ߏਤʹ͸ɺΠϥετʹඞཁͳ৭ΜͳΤοηϯε͕ڽॖͨ͠Ԧಓύλʔϯ͕ͨ͘͞Μ͋Δɻʢͨͩ͠ະ੔ཧʣ
  4. Πϥετ ߏਤ S Ұ఺ಁࢹʗ์ࣹߏਤ ͓͋Γߏਤ ΞϧϑΝϕοτߏਤ ̏෼ׂߏਤ ೔ͷؙߏਤ ର֯ઢߏਤ ໿

    xxx,xxx݅ʢx,xxඵʣ ʲ੔ཧͯ͠ΈͨʳߏਤͷԦಓύλʔϯ ͦΕͧΕͷύλʔϯ͕ੜ·ΕͨܦҢΛௐ΂Δͱɺzয఺zͱzΧϝϥzͷ̎ͭͷ໨తͰ։ൃ͞Ε͍ͯͨɻ ᶃয఺ʢࢹઢʣΛίϯτϩʔϧ͢Δ ᶄΧϝϥΛίϯτϩʔϧ͢Δ ໨తผʹ෼ྨ͢Δͱɺ (
  5. lإ ͓Αͼ ώτͷݕग़աఔͷݚڀԕ౻ޫஉcجૅ৺ཧֶݚڀʢʣlଞΑΓ إ ମͷ෦Ґ ͕༏ઌతʹݕग़͞ΕΔ ʢ͓ͦΒ͘ಈ෺΋ಉ༷ʣ ɾإ΍਎ମ ɾݟ׳ΕͨϞϊ ɾ৘ಈ͕ܹࢗ͞ΕΔϞϊ

    ɾଞͱҧ͏ྖҬ ɾઢͰࣔ͞ΕͨྖҬ ̍ͭ໨͸ɺإ΍਎ମɻ໨ͷલͷڴҖΛૉૣ͘࡯஌͢ΔͨΊɺਓྨ͕ޙఱతʹ֫ಘͨ͠शੑͩͱݴΘΕΔɻ Կ͕য఺ͱͳΔ͔  য఺ͷίϯτϩʔϧɹɿয఺ͱͳΓಘΔཁૉ ਂງ
  6. إ ମͷ෦Ґ ɾإ΍਎ମ ɾݟ׳ΕͨϞϊ ɾ৘ಈ͕ܹࢗ͞ΕΔϞϊ ɾଞͱҧ͏ྖҬ ɾઢͰࣔ͞ΕͨྖҬ ಛʹɺҙࢥૄ௨ʹॏཁͳද৘Λ࢘Δ෦Ґ͸༠໨ੑ͕ߴ͍ɻจԽݍʹΑΔҧ͍΋͋Δɻݟൺ΂Δͱ໘ന͍͔΋ɻ Կ͕য఺ͱͳΔ͔ 

    ಛʹද৘Λߏ੒͢Δ l໨zͱzޱzͷ஫໨౓͸ߴ͍ ʢLFZXPSETࢹ֮ܦ࿏ɺإೝ஌ɺࢹ֮త஫ҙɺϙοϓΞ΢τʣ lإ ͓Αͼ ώτͷݕग़աఔͷݚڀԕ౻ޫஉcجૅ৺ཧֶݚڀʢʣlଞΑΓ য఺ͷίϯτϩʔϧɹɿয఺ͱͳΓಘΔཁૉ ਂງ
  7. ˙˙˙ ˙˙˙ ˙˙˙ "য఺ΛڧԽ͢Δ $য఺Λ҆ఆͤ͞Δ #য఺Λܨ͙ ྫ͑͹ɺτϯωϧߏਤɻ͜Ε͸ɺ̏ͭͷয఺ͱͳΔཁૉΛ૊Έ߹ΘͤͨԦಓύλʔϯͷҰͭɻ য఺ΛૢΔํ਑͸̏ͭ  ྫ͑͹...

    ɾإ΍਎ମ ɾݟ׳ΕͨϞϊ ɾ৘ಈ͕ܹࢗ͞ΕΔϞϊ ɾଞͱҧ͏ྖҬ ɾઢͰࣔ͞ΕͨྖҬ τϯωϧߏਤ ਓ෺ʹ஫໨ΛूΊΔɻ য఺ͷίϯτϩʔϧɹɿয఺ΛૢΔํ਑ ਂງ
  8. ˙˙˙ ˙˙˙ ˙˙˙ "য఺ΛڧԽ͢Δ $য఺Λ҆ఆͤ͞Δ #য఺Λܨ͙ ̏֯ܗͳΒ҆ఆɺٯ̏֯ܗͳΒෆ҆ఆɺͱ͍͏ҹ৅ΛΠϥετશମʹ༩͑Δ͜ͱ͕Ͱ͖Δɻ য఺ΛૢΔํ਑͸̏ͭ  য఺ಉ࢜Λ

    ઢͰܨ͙ɻ ·ͨ͸ۙ͘ʹ ഑ஔ͢Δɻ ྫ͑͹... ෺ཧతʹෆ҆ఆʹݟ͑Δɻ ٯ̏֯ܗߏਤ য఺ͷίϯτϩʔϧɹɿয఺ΛૢΔํ਑ ਂງ
  9. ˙˙˙ ˙˙˙ ˙˙˙ "য఺ΛڧԽ͢Δ $য఺Λ҆ఆͤ͞Δ #য఺Λܨ͙ نଇਖ਼͍͠ͱඒ͍͕͠ɺࣗવքʹͳ͍഑ஔ͸ෆࣗવ͕͞ࡍཱͭɻͦͷόϥϯεΛڊঊͨͪ͸௥ٻͨ͠ɻ য఺ΛૢΔํ਑͸̏ͭ  ఻౷తʹয఺͕҆ఆ͢Δɻ

    ̏෼ׂߏਤ ɾ/෼ׂʢ/㱢ʣ ɾର֯ઢ ɾԫۚʗനۜൺ ɾϨΠϧϚϯൺ ɾϥόοτϝϯτ ɾ௚ަύλʔϯ ʜ ྫ͑͹... য఺ͷίϯτϩʔϧɹɿয఺ΛૢΔํ਑ ਂງ
  10. ৘ใ఻ୡͷ࣌୹ ֆࢣʹٻΊΒΕΔٕೳ ܗ΍৭͕ਖ਼֬ ݸੑ͕৺஍Α͍ ߏਤ্͕ख͍ য఺Λίϯτϩʔϧ ΧϝϥΛίϯτϩʔϧ য఺ͱͳΓಘΔཁૉ إ΍਎ମ ݟ׳ΕͨϞϊ

    ৘ಈతͳϞϊ য఺Λ੍ޚ͢Δํ਑ য఺ΛڧԽ য఺Λ݁Ϳ য఺Λ҆ఆԽ ଞͱҧ͏ྖҬ ઢ͕ࢦࣔ͢͠ྖҬ Πϥετͷ໨త Ԧಓߏਤͷ̎େ໨త BOENPSF લ൒·ͱΊɻয఺ͷཁૉʹ෼ղͯ͠෼ੳ͢Δ͜ͱͰɺֆࢣ͕zͲ͜zΛ఻͍͔͕͑ͨΘ͔ΔΑ͏ʹͳͬͨɻ ֆࢣ͕”Ͳ͜”Λ఻͍͑ͨͷ͔ɿ·ͱΊ ΠϥετϨʔλʔ
  11. 0QFO$7ͷඪ४ϝιουʹ͋ΔݦஶੑϚοϓʢ4BMJFODZ.BQʣΛར༻ɻݹయཧ࿦ͷϝιου͕ͩ൚༻తɻ PythonͰয఺Λݕग़͢ΔᶃɿҰ෦ղઆ য఺ʮଞͱҧ͏ྖҬʯͷݕग़ʢ0QFO$7ͷ4BMJFODZ.BQΛར༻ʣ # import library import cv2 # load

    the input image image = cv2.imread(img_name) # initialize OpenCV's static saliency spectral residual detector saliency = cv2.saliency.StaticSaliencySpectralResidual_create() # compute the saliency map _, saliencyMap = saliency.computeSaliency(image) # convert to the heatmap heatmap = cv2.applyColorMap(saliencyMap, cv2.COLORMAP_JET) # combine the heartmap with input image combined = cv2.addWeighted(image, 0.5, heatmap, 0.7, 0) DWTBMJFODZ4UBUJD4BMJFODZ'JOF(SBJOFE$MBTT3FGFSFODFc0QFO$7
  12. Ϋϥε෼ྨث͕ͲͷྖҬΛ΋ͱʹը૾Λ෼ྨ͢Δ͔ΛՄࢹԽ͢Δ$MBTT"DUJWBUJPO.BQʹͯ࠶ݱɻ PythonͰয఺Λݕग़͢ΔᶄɿҰ෦ղઆ য఺ʮݟ׳ΕͨϞϊʯͷݕग़ʢUGLFSBTWJTʹͯ(SBE$". Λར༻ʣ # import libraries (ུ) # prepare

    model & input data model = Model(weights='imagenet', include_top=True) image = load_img(img_name, target_size=(224, 224)) X = preprocess_input(np.array(image)) # set loss & modifier to replace a softmax function def loss(output): return (output[0][cls_index]) def model_modifier(m): m.layers[-1].activation = tf.keras.activations.linear return m # generate heatmap with GradCAM++ gradcam = GradcamPlusPlus(model, model_modifier=model_modifier, clone=False) cam = gradcam(loss, img, penultimate_layer=-1) cam = normalize(cam) heatmap = np.uint8(cm.jet(cam[0])[..., :3] * 255) LFJTFOUGLFSBTWJTc(JUIVC
  13. ଓ͍ͯɺֆࢣ͕zͳʹzΛ఻͑Α͏ͱ͍ͯ͠Δ͔ΛɺΠϥετͷߏ੒ཁૉ͝ͱʹ෼͚ͯղઆ͢Δɻ Nextɿֆࢣ͕”ͳʹ”Λ఻͍͑ͨͷ͔ ֆࢣ͕lͲ͜zΛ఻͍͔͑ͨ ֆࢣ͕lͳʹzΛ఻͍͔͑ͨ ໌౓ ҉෦ͷྖҬͰ ΠϯύΫτΛڧΊΔ ϋΠΩʔ ϋΠόϦΞϯε إ

    ໌౓͕ࠩ͋Δ ਤܗͰғΉ ৘ใྔʹ͕ࠩ͋Δ നۜൺʢԣํ޲ʣ য఺͕ྡ઀ ϥΠϯ ҆ఆͨ͠ ओ໾ ϑϨʔϜͱฒߦ தԝͷԁ ৭ ஆ͔Ͱ ௐ࿨ͷऔΕͨ ७നͳҹ৅ ஆ৭ ྨࣅ৭ ໌ਗ਼৭ ͜͜·Ͱͷઆ໌ ͔͜͜Βͷઆ໌ ʜ ΧϥʔΩʔ ΧϥʔΩʔ ෼ ղ
  14. ɾϥΠϯ ɾγΣΠϓ ɾ໌౓ ɾ৭ ɾޫ ɾΧϝϥ ɾϥΠϯʢΧϝϥΛؚΉʣ ɾγΣΠϓ ɾ৭ ɾ໌౓ʢޫΛؚΉʣ

    ࠓճ͸આ໌Λγϯϓϧʹ͢ΔͨΊɺ̐ͭʹ·ͱΊͯઆ໌͢Δɻ l7JTJPOετʔϦʔΛ఻͑Δɿ৭ɺޫɺߏਤϋϯεɾ1ɾόοϋʔcϘʔϯσδλϧʢʣlଞΑΓ Πϥετͷߏ੒ཁૉ ͲΜͳߏ੒ཁૉ͕͋Δ͔
  15. Πϥετͷߏ੒ཁૉᶃɿϥΠϯ l7JTJPOετʔϦʔΛ఻͑Δɿ৭ɺޫɺߏਤϋϯεɾ1ɾόοϋʔcϘʔϯσδλϧʢʣlଞΑΓ ϥΠϯΛݟ͚ͭΔͷ͸؆୯ɻϥΠϯ͸ओʹɺয఺ͱϦʔσΟϯάϥΠϯͰߏ੒͞Ε͍ͯΔɻ ߏਤͷࠎ૊ΈͱͳΔઢͰɺߏਤઢͱݺ͹ΕΔɻ தͰ΋ɺࢹઢ΍ਐߦํ޲ͷΑ͏ͳԾ૝ͷઢͷ͜ͱ͸ɺ૝ఆઢͱݺͿɻ JNBHJOBSZMJOF DPNQPTJUJPOBMMJOF ϦχΞεΩʔϜ য఺ͱͳΔͷ͸ য఺੍ޚͷํ਑

    إ΍਎ମ ଞͱҧ͏ྖҬ ઢ͕ࣔ͢ྖҬ ݟ׳ΕͨϞϊ ৘ಈతͳϞϊ য఺Λ҆ఆԽ য఺Λ݁Ϳ য఺ΛڧԽ ʴϦʔσΟϯάϥΠϯ ϥΠϯͱ͸ ϥΠϯͷܗ΍૊Έ߹ΘͤͰɺҹ৅͕มΘΔɻ l-BOETDBQF"SDIJUFDUVSF+PIO0SNTCFF4JNPOETc.D(SBX)JMM1SPGFTTJPOBM1VCʢʣlΑΓ ֆͷ֎࿮΋ର৅
  16. ໌౓ͷ෼෍ʹΑͬͯɺΩʔ΍όϦΞϯεͱ໊͍ͬͨલׂ͕Γ౰ͯΒΕΔɻͦΕͧΕͷޮՌ͸ը૾ࢀরɻ ໌౓ͷར఺ ໌౓ͷ෼෍ʹΑͬͯɺয఺ͷҹ৅ͷ੍ޚ͕Ͱ͖Δɻ ϋΠΩʔ & ϩʔόϦΞϯε ϋΠΩʔ & ϋΠόϦΞϯε ϩʔΩʔ

    & ϋΠόϦΞϯε ϩʔΩʔ & ϩʔόϦΞϯε ҹ৅ ऑ ҹ৅ ऑ ҹ৅ ڧ ҹ৅ ڧ ҉෦ ө ҉෦ ө ໌෦ ө ໌෦ ө Πϥετͷߏ੒ཁૉᶆɿ໌౓ lσδλϧΞʔςΟετ͕஌͓ͬͯ͘΂͖Ξʔτͷݪଇվగ൛EUPUBMDPNcϘʔϯσδλϧʢʣlଞΑΓ
  17. ֆࢣͷૂ͍ Ͳ͜Λ఻͑Δ͔ ͳʹΛ఻͑Δ͔ γΣΠϓ ϥΠϯ ৭ ໌౓ ʜ ߏਤͷࠎ૊ΈΛߏ੒ ʜ

    ഑৭όϥϯεΛ౷੍ ʜ ʜ য఺ͷҹ৅Λ੍ޚ ײ৘໘Λࢧ഑ Τ Ϟ Έ ޙ൒·ͱΊɻ֤ߏ੒ཁૉ͕࣋ͭޮՌΛ஌Δ͜ͱͰɺֆࢣ͕zͳʹzΛ఻͍͔͑ͨΛ୳ΕΔΑ͏ʹͳͬͨɻ ֆࢣ͕”ͳʹ”Λ఻͍͑ͨͷ͔ɿ·ͱΊ ΠϥετϨʔλʔ
  18. ֆࢣͷૂ͍ Ͳ͜Λ఻͑Δ͔ ͳʹΛ఻͑Δ͔ γΣΠϓ ϥΠϯ ৭ ໌౓ ʜ ߏਤͷࠎ૊ΈΛߏ੒ ʜ

    ഑৭όϥϯεΛ౷੍ ʜ ʜ য఺ͷҹ৅Λ੍ޚ ײ৘໘Λࢧ഑ Τ Ϟ Έ ͳ͓ɺΩϟϥΫλʔΠϥετͰ͸ɺਓ෺ͷϙʔζ΍ද৘΋ॏཁɻৄ͘͠͸ɺޙड़͢Δ͓͢͢Ίจݙʹͯɻ ֆࢣ͕”ͳʹ”Λ఻͍͑ͨͷ͔ɿ·ͱΊ ΠϥετϨʔλʔ ΩϟϥΫλʔΠϥετͷ৔߹ ਓ෺ͷϙʔζ΍ද৘ ʢࠓճ͸ະղઆʣ
  19. ͳʹΛ఻͑Δ͔ γΣΠϓ ϥΠϯ ৭ ໌౓ ʜ ߏਤͷࠎ૊ΈΛߏ੒ ʜ ഑৭όϥϯεΛ౷੍ ʜ

    ʜ য఺ͷҹ৅Λ੍ޚ ײ৘໘Λࢧ഑ Τ Ϟ Έ ޙ൒ͷ಺༰ͷҰ෦Λɺ͍͔ͭ͘1ZUIPOͰ࣮૷ͨ͠ɻલ൒ͱಉ͘͡ɺίʔυ͸(PPHMF$PMBCʹܝࡌɻ PythonͰߏ੒ཁૉ͝ͱͷಛ௃Λ෼ੳ͢Δ %&.063- 
 IUUQTDPMBCSFTFBSDIHPPHMFDPNESJWFKKZ);+-*+$4.JGS4UW(75CQFKD/D
  20. 1JMMPXͷLฏۉ๏ϝιουΛར༻ɻฏ׈Խ͸ɺ๲ுͱऩॖΛ਺ճࢼߦ͢ΔϞϧϑΥϩδʔม׵ʹͯ࠶ݱɻ γΣΠϓΛநग़͢Δʢ1JMMPXͷLNFBOTΛར༻ʣ # import library from PIL import Image, ImageFilter

    # load image and convert to grayscale img = Image.open(img_name).convert('L') # convert to 3 group color img3groups = img.quantize(colors=3, kmeans=100) # filter erosion & dilation (6 times) img_filtered = img3groups.convert("RGB") for i in range(6): img_filtered = img_filtered.filter(ImageFilter.MaxFilter()) for i in range(6): img_filtered = img_filtered.filter(ImageFilter.MinFilter()) *NBHF.PEVMFc1JMMPX PythonͰ֤ߏ੒ཁૉͷಛ௃Λ෼ੳ͢ΔᶃɿҰ෦ղઆ
  21. 0QFO1PTFͰਓ෺ͷ࣠ͱΠϚδφϦʔϥΠϯΛਪఆɻΠϥετͰͷਫ਼౓΋ҙ֎ͱߴ͍ɻʢ$PMBCະܝࡌʣ PythonͰ֤ߏ੒ཁૉͷಛ௃Λ෼ੳ͢ΔᶄɿҰ෦ղઆ ϥΠϯΛநग़͢Δʢ0QFO1PTFΛར༻ʣʲ࣮૷ࡁΈɾίʔυ४උதʳ # import libraries import cv2 from openpose

    import pyopenpose as op # Starting OpenPose opWrapper = op.WrapperPython() opWrapper.configure(params) opWrapper.start() # Process Image datum = op.Datum() imageToProcess = cv2.imread(args[0].image_path) datum.cvInputData = imageToProcess opWrapper.emplaceAndPop(op.VectorDatum([datum])) … $.61FSDFQUVBM$PNQVUJOH-BCPQFOQPTF0QFO1PTF1ZUIPO"1*&YBNQMFTc(JUIVC
  22. ਓ෺ͷߦಈ͕࣠ ઌʹԿΛඳ͔ܾ͘ΊΔ ৔ॴ΍෩ܠ͕࣠ ໘γΣΠϓͰ໛ࡧ ઢγΣΠϓͰ໛ࡧ ޙͰԿΛඳ͔ܾ͘ΊΔ ਓ෺ϙʔζͰ໛ࡧ ਓ෺ͷײ৘͕࣠ খ͞ͳαϜωΛඳ͘ʢαϜωΠϧεέονʣ εέονਓܗʗࣗࡱΓͳͲΛࢿྉʹඳ͘

    ઢըநग़ʗϑΥτόογϡʗCMFOEFS౳ ৭΍໌౓ͷόϥϯε഑෼͔Β໛ࡧ͢Δ ୯ઢ΍ྠֲઢΛ૊Έ߹Θͤͯ໛ࡧ͢Δ ϙʔζूʗࣸਅू͔ΒΞΠσΞΛूΊΔ ຊฤͷղઆʹؚΊ͖Εͳ͔͕ͬͨɺΠϥετΛඳ͖࢝ΊΔ౔୆࡞Γ΋ɺ1ZUIPOͰ௅ઓ͍ͯ͠Δɻ PythonͰΠϥετΛඳ͖࢝ΊΔ %&.063- 
 IUUQTDPMBCSFTFBSDIHPPHMFDPNESJWFYS-BS:6)$++&2-X8-YOE;S ʜ ʜ
  23. (PPHMF#PPLT"1*TͰຊͷදࢴΛϥϯμϜʹऔಘ͠ɺγΣΠϓʢ৭ɾ໌౓ʣΛநग़ɻʢஶ࡞ݖʹཁ഑ྀʣ PythonͰΠϥετΛඳ͖࢝ΊΔɿҰ෦ղઆ ໘γΣΠϓΛ൒ࣗಈੜ੒͢Δʢ(PPHMF#PPLT"1*TΛར༻ʣ ஶ࡞ݖอޢͷͨΊ ΦϦδφϧը૾͸ ඇެ։ # import libraries import

    requests, urllib # get data via Google Books APIs base_url = 'https://www.googleapis.com/books/v1/volumes' params = { 'q': query, 'country': 'JP', ‘maxResults': 40, … } r = requests.get(base_url + '?' + urllib.parse.urlencode(params)) data = r.json() # Ҏ߱ɺσʔλ͔ΒαϜωσʔλΛऔಘͨ͠Βɺ͋ͱ͸γΣΠϓͷநग़ͱಉ͡ (PPHMF#PPLT"1*Tc(PPHMF%FWFMPQFST
  24. ͜ΕΛػʹɺΠϥετΛֶͼͨ͘ͳͬͨɺ1ZUIPOͰ෼ੳͨ͘͠ͳͬͨํ͸ɺͥͻֶशϦιʔεΛݟͯɻ ͓͢͢ΊͷֶशϦιʔε ɾΠϥετͷߏ੒ཁૉͷޮՌΛ΋ͬͱ஌Γ͍ͨ ˠॻ੶ɿ7JTJPOετʔϦʔΛ఻͑Δɿ৭ɺޫɺߏਤ ɾΠϥετͷߏ੒ཁૉʮޫʯΛਂ͘஌Γ͍ͨ ˠॻ੶ɿΧϥʔϥΠτϦΞϦζϜͷͨΊͷ৭࠼ͱޫͷඳ͖ํ ɾΠϥετͷߏ੒ཁૉʮ৭ʯΛਂ͘஌Γ͍ͨ ˠॻ੶ɿ৭ృΓνϡʔτϦΞϧ ɾ࣮ફతͳয఺ͷ࡞ΓํΛͨ͘͞Μ஌Γ͍ͨ ˠॻ੶ɿΫϥΠϚοΫε·Ͱ༠͍ࠐΉֆ࡞Γͷൿ݃

    ɾਓମΛਖ਼֬ʹඳ͚ΔΑ͏ʹͳΓ͍ͨ ˠॻ੶ɿඒज़ղ๤ֶϊʔτɺΩϜɾϥοΩͷਓମυϩʔΠϯά ɾθϩ͔ΒΠϥετΛඳ͚ΔΑ͏ʹͳΓ͍ͨ ˠॻ੶ɿ೔ؒͰมΘΔըྗ޲্ߨ࠲ ɾਓ෺͸ඳ͚ͳ͍͚ͲϑΥτόογϡ͸ͯ͠Έ͍ͨ ˠॻ੶ɿࣸਅՃ޻Ͱ࡞Δ෩ܠΠϥετɺϑΥτόογϡೖ໳ ɾ͓͢͢Ίͷ:PVUVCFνϟϯωϧΛڭ͑ͯ ˠ٢ా੣࣏ɺম·͍Δɺອըૉࡐ޻๪ʢܟশུʣ ɾ͓͢͢Ίͷ5XJUUFSΞΧ΢ϯτΛڭ͑ͯ ˠҏ౾ͷඒज़ղ๤ֶऀɺμςφΦτʢܟশུʣ ɾ͓͢͢Ίͷߏਤ্͕ख͍ֆࢣΛڭ͑ͯ ˠࠇ੕ߚനɺ٢ా੣࣏ɺΠϦϠɾΫϒγϊϒɺ͸͠Όʢܟশུʣ ɾਓ෺ͷϙʔζΛཧ࿦తʹֶͼ͍ͨ ˠిࢠॻ੶ɿϙʔζͷఆཧ ɾΩϟϥֆ্͕ख͘ͳΔ࠷୹ϧʔτΛ஌Γ͍ͨ ˠ໨ࢦ͍ͨ͠ֆࢣͷֆฑΛਅࣅͯɺ৭Μͳ̎࣍૑࡞Λඳ͘ ཧ ࿦ ॏ ࢹ ٕ ॏ ࢹ
  25. • ◦×ͰΘ͔Δ෩ܠ࡞ը ਆٕ࡞ըγϦʔζ - ͚͞ϋϥε | KADOKAWAʢ2020ʣ • ֆΛݟΔٕज़ ໊ըͷߏ଄ΛಡΈղ͘

    - ळాຑૣࢠ | ே೔ग़൛ࣾʢ2019ʣ • Vision ετʔϦʔΛ఻͑Δɿ৭ɺޫɺߏਤ - ϋϯεɾPɾόοϋʔ | Ϙʔϯσδλϧʢ2019ʣ • ΠϥετɺອըͷͨΊͷߏਤͷඳըڭࣨ - দԬ৳࣏ | MdN ʢ2018ʣ • ΍΍͘͜͠ͳ͍ֆͷඳ͖ํ - দଜ্ٱ࿠ | ल࿨γεςϜʢ2020ʣ Ҏ্ɺ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ SFGFSFODF  Thank you! • Graph-based visual saliency.- Harel, Jonathan, Christof Koch, and Pietro Perona.ʢ2007ʣ • Visual search in depth - McSorley, E., and J. M. Findlay. | Vision Research 41ʢ2001ʣ
  26. • إ, ͓Αͼ, ώτͷݕग़աఔͷݚڀ - ԕ౻ޫஉ | جૅ৺ཧֶݚڀʢ2015ʣ • ࢹ֮৘ใॲཧͷجૅաఔ

    - ԣ୔Ұ඙ | ੜ࢈ݚڀʢ1992ʣ • ΫϥΠϚοΫε·Ͱ༠͍ࠐΉֆ࡞Γͷൿ݃ ετʔϦʔΛޠΔਓͷͨΊͷඞਢৗࣝ:໌҉ɺߏਤɺϦζϜɺϑϨʔϛϯά - ϚϧίεɾϚς΢=ϝετϨ | Ϙʔϯσδλϧʢ2014ʣ • σδλϧΞʔςΟετ͕஌͓ͬͯ͘΂͖Ξʔτͷݪଇ վగ൛ -৭ɺޫɺߏਤɺղ๤ֶɺԕۙ๏ɺԞߦ͖ - 3dtotal.com | Ϙʔϯσδλϧʢ2021ʣ • Filmmaker's Eye өըͷγʔϯʹֶͿߏਤͱࡱӨज़:ݪଇͱͦͷഁΓํ - άελϘɾϝϧΧʔυ | Ϙʔϯσδλϧʢ2013ʣ Ҏ্ɺ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ SFGFSFODF  Thank you! • Χϥʔ&ϥΠτ ϦΞϦζϜͷͨΊͷ৭࠼ͱޫͷඳ͖ํ - δΣʔϜεɾΨʔχʔ | Ϙʔϯσδλϧʢ2012ʣ
  27. • cv::saliency::StaticSaliencyFineGrained Class Reference | OpenCV • ayoolaolafenwa/PixelLib | Github

    • keisen/tf-keras-vis | Github • Image Module | Pillow • CMU-Perceptual-Computing-Lab / openpose - OpenPose Python API Examples | Github Ҏ্ɺ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ SFGFSFODF  Thank you! • Google Books APIs | Google Developers • Landscape Architecture - John Ormsbee Simonds | McGraw-Hill Professional Pubʢ2013ʣ
  28. • ٢ా੣࣏ Youtube channel - ٢ా੣࣏ | YouTube • Yaki

    Mayuru drawing channel - ম·͍Δ | YouTube • ʮAndyʛΫϦΤΠςΟϒɾσΟϨΫλʔʯࢯͷπΠʔτ | Twitter
 https://twitter.com/we_creat/status/1221939759427260417 • ʮ஑্޾ً Koki IkegamiʯࢯͷπΠʔτ | Twitter
 https://twitter.com/winter_parasol/status/1345661507682459654 Ҏ্ɺ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ SFGFSFODF  Thank you! • ߟ͑ํͰֆ͸มΘΔ ΠϥετεΩϧ޲্ͷͨΊͷμςࣜࢥߟ๏ - μςφΦτ | ϚΠφϏग़൛ʢ2019ʣ • ϙʔζͱߏਤͷ๏ଇ: ࢖͑Δߏਤύλʔϯຬࡌ - YANAMiʗࠤ౻ཽଠ࿠ | ኍࡁಊग़൛ʢ2016ʣ