QR_SPAM対策について
各サーバーの管理人さんへ:
対応できそうなプログラムが作成出来たので実行し、動作を確認しています。
動作内容:
1.添付ファイルのQRコードを判別
2.該当URLだった場合は続く
3.ユーザーのノートを削除
4.ユーザーをBAN
5.ユーザーの所属するサーバーをブロック
(後日手動で解除してください)
プログラム自体は後悔すると悪意ある第三者に利用されてしまうため、QR判定部分だけ公開します。
他の対応法も幾つか見つかっています。
今後に備えてノイズ混じりのQRコードを判定できる、という用意をしました。
本当に困っているサーバー管理者さんはご相談下さい。
助力する用意があります。
import cv2
import numpy as np
from pyzbar.pyzbar import decode
def preprocess_image(image_path):
img = cv2.imread(image_path)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
return img_gray
def invert_and_remove_noise(image_file, threshold=30):
gray_image = cv2.imread(image_file, cv2.IMREAD_GRAYSCALE)
inverted_image = cv2.bitwise_not(gray_image)
_, mask = cv2.threshold(inverted_image, threshold, 255, cv2.THRESH_BINARY)
cleaned_image = cv2.bitwise_and(inverted_image, inverted_image, mask=mask)
return cleaned_image
def decode_qr_with_pyzbar(image):
decoded_objects = decode(image)
results = []
for obj in decoded_objects:
results.append(obj.data.decode('utf-8'))
return results
def decode_saved_images(image_file):
# グレースケール
print(f"\n{image_file}...")
image = cv2.imread(image_file, cv2.IMREAD_GRAYSCALE)
# Pyzbar
pyzbar_results = decode_qr_with_pyzbar(image)
if pyzbar_results:
print("Pyzbar:")
for result in pyzbar_results:
print("データ:", result)
else:
print("Pyzbar_NG")
def main(image_path):
gray_image = preprocess_image(image_path)
cv2.imwrite('grayscale_image.png', gray_image)
decode_saved_images('grayscale_image.png')
# 反転して薄い部分を削除
inverted_cleaned_image = invert_and_remove_noise('grayscale_image.png')
cv2.imwrite('inverted_cleaned_image.png', inverted_cleaned_image)
# 反転した画像でQRコード解析を実施
decode_saved_images('inverted_cleaned_image.png')
if __name__ == "__main__":
image_path = "./spam1.jpeg"
main(image_path)
店子さんへ:
もしQRコードのSPAMに生き残りがいれば教えて下さい。
改良します。
#管理人からのお知らせ