Java テクノロジを使用して契約書の本物の公印を正確に識別する方法
2.1. 画像の二値化
契約書の画像はカラーが一般的ですが、公印は白黒が一般的です。したがって、公印の特徴をより適切に抽出するには、カラー画像をバイナリ画像に変換する必要があります。これは、OpenCV ライブラリの 2 値化関数を使用して実現できます:
import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.core.Size; import org.opencv.core.Scalar; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; public class ImageBinarization { public static void main(String[] args) { // 加载OpenCV库 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // 读取合同图像 Mat image = Imgcodecs.imread("contract.jpg"); // 转换为灰度图像 Mat grayImage = new Mat(); Imgproc.cvtColor(image, grayImage, Imgproc.COLOR_BGR2GRAY); // 二值化 Mat binaryImage = new Mat(); Imgproc.threshold(grayImage, binaryImage, 0, 255, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU); // 保存二值化图像 Imgcodecs.imwrite("binary_image.jpg", binaryImage); } }
2.2. ノイズ除去
契約画像には、スキャンまたは撮影中に粒子やテクスチャなどのノイズが含まれる可能性があるため、実行する必要があります。これらのノイズを除去するために値イメージに何らかの処理を加えます。 OpenCV ライブラリのオープン操作を使用すると、次のことを実現できます:
import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.core.Size; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; public class NoiseRemoval { public static void main(String[] args) { // 读取二值化图像 Mat binaryImage = Imgcodecs.imread("binary_image.jpg", Imgcodecs.IMREAD_GRAYSCALE); // 进行开操作 Mat noiseRemovedImage = new Mat(); Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3, 3)); Imgproc.morphologyEx(binaryImage, noiseRemovedImage, Imgproc.MORPH_OPEN, kernel); // 保存去噪声图像 Imgcodecs.imwrite("noise_removed_image.jpg", noiseRemovedImage); } }
2.3. エッジ検出
エッジ検出は、公印を識別するための重要なステップです。これは、OpenCV ライブラリの Canny アルゴリズムを使用して実装できます。
import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.core.Size; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; public class EdgeDetection { public static void main(String[] args) { // 读取去噪声图像 Mat noiseRemovedImage = Imgcodecs.imread("noise_removed_image.jpg", Imgcodecs.IMREAD_GRAYSCALE); // 进行边缘检测 Mat edges = new Mat(); Imgproc.Canny(noiseRemovedImage, edges, 100, 200); // 保存边缘图像 Imgcodecs.imwrite("edges.jpg", edges); } }
3.1. 特徴抽出
まず、トレーニングと分類のためにエッジ画像からいくつかの特徴を抽出する必要があります。一般的に使用される特徴には、形状、テクスチャ、色などがあります。ここでは形状特徴を例として、OpenCV ライブラリの輪郭検出を使用して公印の形状特徴を抽出します:
import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.core.Size; import org.opencv.core.Scalar; import org.opencv.imgproc.Imgproc; public class ShapeFeatureExtraction { public static void main(String[] args) { // 读取边缘图像 Mat edges = Imgcodecs.imread("edges.jpg", Imgcodecs.IMREAD_GRAYSCALE); // 检测轮廓 List<MatOfPoint> contours = new ArrayList<>(); Mat hierarchy = new Mat(); Imgproc.findContours(edges, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE); // 提取轮廓特征 double[] features = new double[contours.size()]; for (int i = 0; i < contours.size(); i++) { features[i] = Imgproc.contourArea(contours.get(i)); } // 打印轮廓特征 for (double feature : features) { System.out.println("Contour feature: " + feature); } } }
3.2. トレーニングと分類
次に、抽出された特徴をトレーニングに使用します。そして分類。まず、ラベル付き公印画像をトレーニングサンプルとして用意する必要があります。次に、抽出された特徴と対応するタグが機械学習アルゴリズムによってトレーニングされ、公印分類器が構築されます。認識段階では、認識対象となる契約画像の特徴を抽出し、学習された識別器を用いて分類判定を行います。
トレーニングと分類のための完全なコードは複雑であるため、ここで 1 つずつ示すことはできませんが、サポート ベクター マシンなどの機械学習アルゴリズムを使用するには、OpenCV の公式ドキュメントと関連チュートリアルを参照してください。トレーニングと分類に使用します。
ただし、この方法は実印の識別精度を向上させることはできますが、実印の真贋・合法性を100%保証するものではないことに注意してください。実際のアプリケーションでは、公印の安全性と有効性を確保するために、他のセキュリティ対策や手段を組み合わせる必要もあります。
参考文献:
以上がJava技術を利用して契約書の本物の実印を正確に識別する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。