3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SNS型詐欺(国際ロマンス詐欺や投資詐欺)に使われた写真が合成かどうかを判断してくれるGPT

 NPOの詐欺被害の無料相談で時々明らかに編集されたと思われる画像を被害者の方から提供されます。しかし、それが「合成である」ことを説明するのは意外と難しく感じます。ELA分析はFoto ForensicsForensicallyなど、無料で使えるサイトがありますが、真っ暗なELA画像から「この部分は合成っぽい」ということはわかっても「合成です」とはっきり言える自信は持てないこともあります。そこで、Pythonのコードを使ったGPTでELAを分析させるようにしてみました。

使用環境

無料版ChatGPTでも使えます。

機能

・SNSやマッチングアプリで知り合った相手が使っている写真に不自然さを感じたときに、ELA(Error Level Analysis)を使って写真が合成かどうかを確認できます。
・鑑識の専門家向けではなく一般のネットユーザー向けですので、分かりやすい文章でELA分析結果を解説しています。

使い方

(1)写真をアップロードしてください。
(2)GPTがELA分析をしてくれます。
(3)ChatGPTが内容を分析して回答してくれます。

注意: この例で使った写真は、国際ロマンス詐欺に詐欺によく使われていた、アメリカ合衆国のジョージア州アトランタの政治家のアレックス・ワン氏のものを詐欺師グループが合成して軍服にした合成写真です。本物のワン氏は政治家で軍人ではありませんので、この写真は明らかに編集されて作られたものです。分析の精度を下げないために、顔を隠したり"Used By Scammers"の透かしを入れないようにしていますのでご了承ください。写真の人は詐欺師とは無関係です。

写真をChatGPTに送ると以下のような文章が出てきます。

画像の編集の有無を調べるために、Error Level Analysis(ELA)を実行します。少々お待ちください。

output.png

上記の画像は、Error Level Analysis(ELA)を適用した結果です。

解析結果:

・**ELA画像(右側)**を見ると、一部の領域で異常なエラーレベルの違いが見られます。

・特に顔の部分や**装飾のある箇所(勲章やバッジなど)**でエラーレベルの違いが際立っており、これらの部分が編集された可能性があります。

・一般的に、自然なJPEG画像ではエラーレベルが均一になりますが、編集された部分は異常な輝度を示すことが多いです。

この画像は何らかの編集が施されている可能性が高いと考えられます。特に顔の領域が加工された可能性があるため、元の画像と比較して検証することをお勧めします。 ​

Pythonコード(ChatGPTで生成)

import cv2
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image, ImageChops, ImageEnhance

# 画像のパス
image_path = "画像のパス"

# 画像を開く
original = Image.open(image_path).convert("RGB")

# 画像をJPEGで再保存(再圧縮)
temp_path = "/mnt/data/temp.jpg"
original.save(temp_path, "JPEG", quality=90)

# 再保存した画像を開く
compressed = Image.open(temp_path)

# ELA(Error Level Analysis)の計算
ela_image = ImageChops.difference(original, compressed)

# コントラストを強調
enhancer = ImageEnhance.Contrast(ela_image)
ela_image = enhancer.enhance(10)

# ELA画像を表示
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.title("Original Image")
plt.imshow(original)
plt.axis("off")

plt.subplot(1, 2, 2)
plt.title("ELA Image")
plt.imshow(ela_image, cmap="gray")
plt.axis("off")

# 画像を保存
ela_image_path = "/mnt/data/ela_result.jpg"
ela_image.save(ela_image_path)

plt.show()

免責事項
ELA画像の判定というのは目視では非常に難しく、ELA画像を見ただけではよくわからないことが多かったのでこのGPTを作りました。明らかに怪しいものは的確に言判定してくれていますが、ChatGPTが間違った判定をすることはあり得ますので、その点はご理解ください。ChatGPTが誤った判断をしてその結果詐欺被害にあったとしても、当方では一切責任を負いません。基本はSNSなどで知らない人にアプローチされたらまず疑ってみることです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?