バーコードを使用して実験室でチューブを自動的に分類する

ブログ カテゴリ: バーコード.NET

2025/07/02

現代の医療研究室では、毎日数百から数千の生物学的サンプルの処理に直面しています。試験管の流れを管理するには、効率だけでなく、分類と処理の各段階でエラーを最小限に抑えることも必要です。このような状況では、作業プロセスの効率、精度、安全性を向上させるために、バーコード技術に基づく自動化が不可欠になります。



自動仕分けの原理と段階

試験管の自動仕分けは、マシンビジョンとバーコード認識技術に基づいています。すべての試験管には、準備段階で個別のGS1バーコードが付与されます。このバーコードには、生体材料の種類、患者、必要な分析、その他の関連情報が含まれています。システムの主な原理:

自動化段階:




テクノロジーの主なタスクと課題

自動チューブ仕分けは、研究室のプロセスを大幅に簡素化および高速化する革新的なソリューションです。明らかな利点があるにもかかわらず、このようなテクノロジーの実装には、多くの重要なタスクと課題が伴います。

主要タスク:

課題:




ソフトウェア バーコード スキャナーの役割

自動化において中心的な位置を占めるのはソフトウェア バーコード スキャナーです。そのアルゴリズムは以下を目的として設計されています:

例: 特殊なアルゴリズムにより、円筒面上のバーコードを読み取り、複数の試験管を一度にすばやく処理 (バッチ スキャン) し、研究室の会計システムや仕分けシステムと統合することもできます。

実装の実際的な利点:




結論

バーコードに基づく自動チューブ仕分けは、単なる技術革新ではなく、現代の研究室物流の本格的な基盤であり、高いレベルの安全性、精度、効率性を保証します。ソフトウェアスキャナーはこの自動化の中核を担い、研究室が将来のニーズに今日対応することを可能にします。

VintaSoft Barcode .NET SDK は、バーコードを使用した研究室での自動チューブ仕分けに最適なソリューションの 1 つです。SDK には次の利点があります。

実験チューブの画像からGS1-128バーコードを認識する方法を示すC#コードを以下に示します。
/// <summary>
/// Reads GS1-128 barcodes from a <see cref="System.Drawing.Bitmap"/>.
/// </summary>
/// <param name="bitmap">A bitmap with barcodes.</param>
public static void ReadGS1_128BarcodesFromBitmap(System.Drawing.Bitmap bitmap)
{
    // create barcode reader
    using (Vintasoft.Barcode.BarcodeReader reader = new Vintasoft.Barcode.BarcodeReader())
    {
        // specify that reader must search for GS1-128 barcodes
        reader.Settings.ScanBarcodeTypes = BarcodeType.None;
        reader.Settings.ScanBarcodeSubsets.Add(BarcodeSymbologySubsets.GS1_128);

        // read barcodes from image
        Vintasoft.Barcode.IBarcodeInfo[] infos = Vintasoft.Barcode.GdiExtensions.ReadBarcodes(reader, bitmap);

        // gets a GS1 Application identifiers from barcode value
        GS1ApplicationIdentifierValue[] aiValues = ((GS1BarcodeInfo)infos[0]).ApplicationIdentifierValues;

        StringBuilder printableValue = new StringBuilder();

        // print Application identifiers values
        for (int i = 0; i < aiValues.Length; i++)
        {
            GS1ApplicationIdentifierValue aiValue = aiValues[i];
            GS1ApplicationIdentifier ai = aiValue.ApplicationIdentifier;
            Console.WriteLine(string.Format("[{0}] {1}", i + 1, aiValue));
            Console.WriteLine(string.Format("Application identifier   : {0}", ai.ApplicationIdentifier));
            Console.WriteLine(string.Format("Value                    : {0}", aiValue.Value));
            Console.WriteLine(string.Format("Data title               : {0}", ai.DataTitle));
            Console.WriteLine(string.Format("Data content             : {0}", ai.DataContent));
            Console.WriteLine(string.Format("Format                   : {0}", ai.Format));
            Console.WriteLine(string.Format("Is contains decimal point: {0}", ai.IsContainsDecimalPoint));
            Console.WriteLine(string.Format("Is variable length       : {0}", ai.IsVariableLength));
            Console.WriteLine();
            printableValue.Append(aiValue.ToString());
        }

        // print GS1 printable value
        Console.WriteLine("Printable GS1 value: " + printableValue.ToString());
    }
}