1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenCVは画像がGrok君が作ったか分かる?⇒No!

Last updated at Posted at 2025-12-25

一体いつから ――――― クリスマス当日に「27件目」のアドカレを投稿しないと錯覚していた

ふわはははは!!!!ちょっと試したので。

■OpenCVは画像がGrok君が作ったか分かる?⇒No!

「OpenCVはメタデータを扱えると言ったな。あれは(Grok生成画像に関しては)嘘だ」

■ Grok君製の画像には、Promptが含まれている ⇒ YESっぽい:ok_woman:

  1. Grok君に画像を作ってもらう
  2. 作った画像をダウンロードする
  3. テキストエディタで開くと、先頭の方にXMP”もどき"が入ってるっぽい
kmtr@kmtr-VMware-Virtual-Platform:~$ jpeginfo CREATED.jpg -v
Reading file: CREATED.jpg
Found marker APP1 (0xE1): type=Unknown, original_length=1018, data_length=1018
Found marker APP0 (0xE0): type=JFIF, original_length=14, data_length=14
Found total of 2 markers (total size 1032 bytes), and 1 unknown markers
CREATED.jpg                       832 x 1248 24bit N JFIF,UNKNOWN              120940

■ Xに投稿した画像には、Promptが含まれている ⇒ No!:no_good:

だけど、Xに投稿した画像からは、こういうメタ情報はカットされている模様。

kmtr@kmtr-VMware-Virtual-Platform:~$ jpeginfo UPLOADED.jpg -v
Reading file: UPLOADED.jpg
Found marker APP0 (0xE0): type=JFIF, original_length=14, data_length=14
Found total of 1 markers (total size 14 bytes), and 0 unknown markers
UPLOADED.jpg                      453 x  680 24bit P JFIF                       11886

■ OpenCVのimreadWithMetadata()で読めるの?⇒ NO!:no_good:

OpenCVのimgcodecsがメタ情報サポートしているんだったら、これも読めるんじゃないの?と思ったらダメなんですよね・・・

// g++ main.cpp -o a.out -I/usr/local/include/opencv4 -lopencv_core -lopencv_imgcodecs
#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>

int main() {
    std::string filename = "CREATED.jpg";
    cv::Mat img;

    std::vector<int> metadataTypes = { cv::IMAGE_METADATA_XMP };
    std::vector<cv::Mat> metadata;

    img = cv::imreadWithMetadata(filename, metadataTypes, metadata, cv::IMREAD_COLOR);

    if (img.empty()) {
        return -1;
    }

    if (!metadata.empty()) {
        cv::Mat xmpMat = metadata[0];
        std::string xmp_str(xmpMat.begin<uchar>(), xmpMat.end<uchar>());
        std::cout << "XMP Data: " << xmp_str << std::endl;
    }
    else
    {
        std::cout << "No XMP Data: " << std::endl;
    }

    return 0;
}
kmtr@kmtr-VMware-Virtual-Platform:~/work/temp$ strings CREATED.jpg | grep XMP
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.1.0-jc003">
kmtr@kmtr-VMware-Virtual-Platform:~/work/temp$ ./a.out
No XMP Data:

■ このデータはXMPメタデータなの? ⇒ No!!:no_good:

なぜならば、OpenCVがAPP1 markerに "http://ns.adobe.com/xap/1.0/" という文字列が含まれていない場合、これはXMPではない!と判定します。どうやらXMPではなく、XMPっぽいもの、ですね。

先ほどのjpeginfoの結果も思い出すと、確かにUnknownになっている。ということで、"XMPっぽいもの"なのです。

kmtr@kmtr-VMware-Virtual-Platform:~$ jpeginfo CREATED.jpg -v
Reading file: CREATED.jpg
Found marker APP1 (0xE1): type=Unknown, original_length=1018, data_length=1018
Found marker APP0 (0xE0): type=JFIF, original_length=14, data_length=14
Found total of 2 markers (total size 1032 bytes), and 1 unknown markers
CREATED.jpg                       832 x 1248 24bit N JFIF,UNKNOWN              120940

■ まとめ

  • Grokで生成した画像にはPromptを含むメタ情報はあるっぽい
  • でも、これをツイートするとフィルタリングされてメタ情報は消えるっぽい
  • 完全なXMP準拠ではないので、OpenCVからは読めない。

以上、ありがとうございました!

1
1
2

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?