国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

??低曄鄼C(jī)SDK二次開發(fā)(JAVA語言)

這篇具有很好參考價(jià)值的文章主要介紹了??低曄鄼C(jī)SDK二次開發(fā)(JAVA語言)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

有個(gè)項(xiàng)目需要使用java程序讀取??低暤南鄼C(jī)圖片。相機(jī)通過以太網(wǎng)連接服務(wù)器,部署在服務(wù)器上的java程序?qū)⑾鄼C(jī)拍攝的畫面保存在指定路徑下。
??低曁峁┝藄dk開發(fā)包,可以在官網(wǎng)中下載,windows和linux系統(tǒng)都有。但是開發(fā)包中給出的示例代碼,無法滿足實(shí)際需要,所以還需要對(duì)代碼進(jìn)行二次開發(fā)。
在進(jìn)行二次開發(fā)時(shí),官網(wǎng)并未提供java語言的開發(fā)手冊(cè),示例代碼中也并未提供詳細(xì)注釋,所以我只能在閱讀示例代碼時(shí),按照自己的理解添加一些注釋。

客戶端創(chuàng)建虛擬相機(jī)

實(shí)體相機(jī)已經(jīng)還回去了,所以這里用MVS客戶端創(chuàng)建一個(gè)虛擬相機(jī),測(cè)試代碼。
??低晄dk開發(fā),代碼,項(xiàng)目,數(shù)碼相機(jī),java,開發(fā)語言
海康威視sdk開發(fā),代碼,項(xiàng)目,數(shù)碼相機(jī),java,開發(fā)語言

設(shè)置相機(jī)名字

??低晄dk開發(fā),代碼,項(xiàng)目,數(shù)碼相機(jī),java,開發(fā)語言

示例代碼

我這里只需要對(duì)保存照片的代碼進(jìn)行修改。
以下是官網(wǎng)提供的保存照片的代碼
我在示例代碼中對(duì)一些方法做了注釋

保存圖片程序
/***************************************************************************************************
 * @file      SaveImage.java
 * @breif     Use functions provided in MvCameraControlWrapper.jar to save image as JPEG。
 * @author    zhanglei72
 * @date      2020/02/10
 *
 * @warning  
 * @version   V1.0.0  2020/02/10 Create this file
 * @since     2020/02/10
 **************************************************************************************************/

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

import MvCameraControlWrapper.*;
import static MvCameraControlWrapper.MvCameraControl.*;
import static MvCameraControlWrapper.MvCameraControlDefines.*;

public class SaveImage
{
	/**
	* 打印連接的設(shè)備信息
	* 如果是通過以太網(wǎng)連接的相機(jī),則會(huì)輸出ip、名稱等內(nèi)容
	* 如果是通過usb連接的相機(jī),則會(huì)輸出相機(jī)名稱
	*/
    private static void printDeviceInfo(MV_CC_DEVICE_INFO stDeviceInfo) 
    {
        if (null == stDeviceInfo) {
            System.out.println("stDeviceInfo is null");
            return;
        }
        
        if (stDeviceInfo.transportLayerType == MV_GIGE_DEVICE) {
            System.out.println("\tCurrentIp:       " + stDeviceInfo.gigEInfo.currentIp);
            System.out.println("\tModel:           " + stDeviceInfo.gigEInfo.modelName);
            System.out.println("\tUserDefinedName: " + stDeviceInfo.gigEInfo.userDefinedName);
        } else if (stDeviceInfo.transportLayerType == MV_USB_DEVICE) {
            System.out.println("\tUserDefinedName: " + stDeviceInfo.usb3VInfo.userDefinedName);
            System.out.println("\tSerial Number:   " + stDeviceInfo.usb3VInfo.serialNumber);
            System.out.println("\tDevice Number:   " + stDeviceInfo.usb3VInfo.deviceNumber);
        } else {
            System.err.print("Device is not supported! \n");
        }

        System.out.println("\tAccessible:      "
            + MvCameraControl.MV_CC_IsDeviceAccessible(stDeviceInfo, MV_ACCESS_Exclusive));
        System.out.println("");
    }

    private static void printFrameInfo(MV_FRAME_OUT_INFO stFrameInfo)
    {
        if (null == stFrameInfo)
        {
            System.err.println("stFrameInfo is null");
            return;
        }
        
        StringBuilder frameInfo = new StringBuilder("");
        frameInfo.append(("\tFrameNum[" + stFrameInfo.frameNum + "]"));
        frameInfo.append("\tWidth[" + stFrameInfo.width + "]");
        frameInfo.append("\tHeight[" + stFrameInfo.height + "]");
        frameInfo.append(String.format("\tPixelType[%#x]", stFrameInfo.pixelType.getnValue()));

        System.out.println(frameInfo.toString());
    }

	/**
	* 保存圖片到本地
	* 這個(gè)方法中主要是設(shè)置了文件保存的路徑
	*/
    public static void saveDataToFile(byte[] dataToSave, int dataSize, String fileName)
    {
        OutputStream os = null;

        try
        {
            // Create directory
            File tempFile = new File("dat");
            if (!tempFile.exists()) 
            {
                tempFile.mkdirs();
            }

            os = new FileOutputStream(tempFile.getPath() + File.separator + fileName);
            os.write(dataToSave, 0, dataSize);
            System.out.println("SaveImage succeed.");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            // Close file stream
            try 
            {
                os.close();
            } 
            catch (IOException e) 
            {
                e.printStackTrace();
            }
        }
    }
    
    /**
    * 當(dāng)有多個(gè)相機(jī)連接但程序只能保存一臺(tái)相機(jī)拍攝的照片
    * 所以需要通過此方法輸入相機(jī)索引號(hào)
    */
    public static int chooseCamera(ArrayList<MV_CC_DEVICE_INFO> stDeviceList)
    {
        if (null == stDeviceList)
        {
            return -1;
        }
        
        // Choose a device to operate
        int camIndex = -1;
        Scanner scanner = new Scanner(System.in);

        while (true)
        {
            try
            {
            	/*
            	* 手動(dòng)輸入
            	*/
                System.out.print("Please input camera index (-1 to quit):");
                camIndex = scanner.nextInt();
                if ((camIndex >= 0 && camIndex < stDeviceList.size()) || -1 == camIndex)
                {
                    break;
                }
                else
                {
                    System.out.println("Input error: " + camIndex);
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
                camIndex = -1;
                break;
            }
        }
        scanner.close();

        if (-1 == camIndex)
        {
            System.out.println("Bye.");
            return camIndex;
        }

        if (0 <= camIndex && stDeviceList.size() > camIndex)
        {
            if (MV_GIGE_DEVICE == stDeviceList.get(camIndex).transportLayerType)
            {
                System.out.println("Connect to camera[" + camIndex + "]: " + stDeviceList.get(camIndex).gigEInfo.userDefinedName);
            }
            else if (MV_USB_DEVICE == stDeviceList.get(camIndex).transportLayerType)
            {
                System.out.println("Connect to camera[" + camIndex + "]: " + stDeviceList.get(camIndex).usb3VInfo.userDefinedName);
            }
            else
            {
                System.out.println("Device is not supported.");
            }
        }
        else
        {
            System.out.println("Invalid index " + camIndex);
            camIndex = -1;
        }

        return camIndex;
    }

	/**
	* 主方法
	* 保存照片的代碼在這里
	*/
    public static void main(String[] args)
    {
        int nRet = MV_OK;
        int camIndex = -1;
        Handle hCamera = null;
        ArrayList<MV_CC_DEVICE_INFO> stDeviceList;

        do
        {
            System.out.println("SDK Version " + MvCameraControl.MV_CC_GetSDKVersion());

            // Enuerate GigE and USB devices 
            try
            {
                stDeviceList = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE);
                if (0 >= stDeviceList.size())
                {
                    System.out.println("No devices found!");
                    break;
                }
                int i = 0;
                for (MV_CC_DEVICE_INFO stDeviceInfo : stDeviceList)
                {
                    System.out.println("[camera " + (i++) + "]");
                    printDeviceInfo(stDeviceInfo);
                }
            }
            catch (CameraControlException e)
            {
                System.err.println("Enumrate devices failed!" + e.toString());
                e.printStackTrace();
                break;
            }

            // choose camera
            camIndex = chooseCamera(stDeviceList);
            if (camIndex == -1)
            {
                break;
            }

            // Create handle
            try
            {
                hCamera = MvCameraControl.MV_CC_CreateHandle(stDeviceList.get(camIndex));
            }
            catch (CameraControlException e)
            {
                System.err.println("Create handle failed!" + e.toString());
                e.printStackTrace();
                hCamera = null;
                break;
            }

            // Open device
            nRet = MvCameraControl.MV_CC_OpenDevice(hCamera);
            if (MV_OK != nRet)
            {
                System.err.printf("Connect to camera failed, errcode: [%#x]\n", nRet);
                break;
            }

            // Make sure that trigger mode is off
            /*
            * 設(shè)置相機(jī)的觸發(fā)器開關(guān) Off On
            */
            nRet = MvCameraControl.MV_CC_SetEnumValueByString(hCamera, "TriggerMode", "Off");
            if (MV_OK != nRet)
            {
                System.err.printf("SetTriggerMode failed, errcode: [%#x]\n", nRet);
                break;
            }

            // Get payload size
            MVCC_INTVALUE stParam = new MVCC_INTVALUE();
            nRet = MvCameraControl.MV_CC_GetIntValue(hCamera, "PayloadSize", stParam);
            if (MV_OK != nRet)
            {
                System.err.printf("Get PayloadSize fail, errcode: [%#x]\n", nRet);
                break;
            }

            // Start grabbing
            nRet = MvCameraControl.MV_CC_StartGrabbing(hCamera);
            if (MV_OK != nRet)
            {
                System.err.printf("Start Grabbing fail, errcode: [%#x]\n", nRet);
                break;
            }

            // Get one frame
            MV_FRAME_OUT_INFO stImageInfo = new MV_FRAME_OUT_INFO();
            byte[] pData = new byte[(int)stParam.curValue];
            nRet = MvCameraControl.MV_CC_GetOneFrameTimeout(hCamera, pData, stImageInfo, 1000);
            if (MV_OK != nRet)
            {
                System.err.printf("GetOneFrameTimeout fail, errcode:[%#x]\n", nRet);
                break;
            }

            System.out.println("GetOneFrame: ");
            printFrameInfo(stImageInfo);
            int imageLen = stImageInfo.width * stImageInfo.height * 3;    // Every RGB pixel takes 3 bytes
            byte[] imageBuffer = new byte[imageLen];

            // Call MV_CC_SaveImage to save image as JPEG
            MV_SAVE_IMAGE_PARAM stSaveParam = new MV_SAVE_IMAGE_PARAM();
            stSaveParam.width = stImageInfo.width;                                  // image width
            stSaveParam.height = stImageInfo.height;                                // image height
            stSaveParam.data = pData;                                               // image data
            stSaveParam.dataLen = stImageInfo.frameLen;                             // image data length
            stSaveParam.pixelType = stImageInfo.pixelType;                          // image pixel format
            stSaveParam.imageBuffer = imageBuffer;                                  // output image buffer
            stSaveParam.imageType = MV_SAVE_IAMGE_TYPE.MV_Image_Jpeg;               // output image pixel format
            stSaveParam.methodValue = 0;                                            // Interpolation method that converts Bayer format to RGB24.  0-Neareast 1-double linear 2-Hamilton
            stSaveParam.jpgQuality = 60;                                            // JPG endoding quality(50-99]

            nRet = MvCameraControl.MV_CC_SaveImage(hCamera, stSaveParam);
            if (MV_OK != nRet)
            {
                System.err.printf("SaveImage fail, errcode: [%#x]\n", nRet);
                break;
            }

            // Save buffer content to file
            /*
            * 將照片保存在本地,且在這里指定文件的名稱
            */
            saveDataToFile(imageBuffer, stSaveParam.imageLen, "SaveImage.jpeg");

            // Stop grabbing
            nRet = MvCameraControl.MV_CC_StopGrabbing(hCamera);
            if (MV_OK != nRet)
            {
                System.err.printf("StopGrabbing fail, errcode: [%#x]\n", nRet);
                break;
            }
        } while (false);

        if (null != hCamera)
        {
            // Destroy handle
            nRet = MvCameraControl.MV_CC_DestroyHandle(hCamera);
            if (MV_OK != nRet) {
                System.err.printf("DestroyHandle failed, errcode: [%#x]\n", nRet);
            }
        }
    }
}

運(yùn)行結(jié)果

海康威視sdk開發(fā),代碼,項(xiàng)目,數(shù)碼相機(jī),java,開發(fā)語言
程序啟動(dòng)后,在控制臺(tái)輸出可連接的所有相機(jī),用戶輸入相機(jī)索引號(hào)連接指定相機(jī)。[Camera 0]表示索引號(hào)為0。然后相機(jī)自動(dòng)進(jìn)行拍攝。
??低晄dk開發(fā),代碼,項(xiàng)目,數(shù)碼相機(jī),java,開發(fā)語言

修改需求

通過運(yùn)行程序,發(fā)現(xiàn)直接使用示例代碼,無法滿足實(shí)際使用需求。無法做到,圖片保存名稱不重復(fù)、圖片保存路徑無法自定義、需要用戶手動(dòng)輸入相機(jī)索引號(hào)、對(duì)于指定日期以前的舊照片刪除等等。

二次開發(fā)

首先記錄對(duì)核心代碼的修改內(nèi)容,然后再將所有代碼都列出來。
我這里使用了Springboot框架,為的是通過application.yml文件配置路徑等數(shù)量,另外使用maven架構(gòu),方便打包。
??低晄dk開發(fā),代碼,項(xiàng)目,數(shù)碼相機(jī),java,開發(fā)語言

SaveImage為核心代碼類
FileUtil用來刪除過期照片
ApplicationYml用來讀取yml文件中的配置

引入外部包

在進(jìn)行二次開發(fā)前,還需要引入官網(wǎng)提供的下載包。
??低晄dk開發(fā),代碼,項(xiàng)目,數(shù)碼相機(jī),java,開發(fā)語言
創(chuàng)建lib文件夾,將jar放入后,右擊,Add as library。
在pom.xml文件中引入依賴

    <dependencies>
        <dependency>
            <groupId>com.hzx.testmaven34hikvision</groupId>
            <artifactId>MvCameraControlWrapper</artifactId>
            <version>1.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/lib/MvCameraControlWrapper.jar</systemPath>
        </dependency>
    </dependencies>
<build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                        <version>2.3.0.RELEASE</version>
                        <configuration>
                            <fork>true</fork>
                            <includeSystemScope>true</includeSystemScope>
                        </configuration>
                    </plugin>
                     <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </plugin>
                </plugins>
</build>
對(duì)SaveImage.java文件進(jìn)行修改

這里先對(duì)照著示例代碼,將修改的地方列舉出來。全部代碼后面給出。
示例代碼中一些無關(guān)緊要的輸出內(nèi)容,在二次開發(fā)時(shí)注釋掉了,這里就不再詳細(xì)說明。
修改的地方,通過注釋標(biāo)出

保存圖片saveDataToFile方法
    public static void saveDataToFile(byte[] dataToSave, int dataSize, String fileName,String savePath) {
        OutputStream os = null;

        try {
            // Create directory
           	/*
           	* savePath參數(shù)為圖片保存路徑,在調(diào)用方法時(shí)通過參數(shù)傳入
           	*/
            File tempFile = new File(savePath);
            if (!tempFile.exists()) {
                tempFile.mkdirs();
            }

            os = new FileOutputStream(tempFile.getPath() + File.separator + fileName);
            os.write(dataToSave, 0, dataSize);
            /*
            * 圖片保存成功后,輸出當(dāng)前時(shí)間
            */
            System.out.println("--- " + sfTime.format(new Date()) + " Save Image succeed ---");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // Close file stream
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
選擇相機(jī)chooseCamera方法
    public static int chooseCamera(ArrayList<MV_CC_DEVICE_INFO> stDeviceList,int camIndex) {
        if (null == stDeviceList) {
            return -1;
        }

        // Choose a device to operate
        //int camIndex = -1;
        Scanner scanner = new Scanner(System.in);
		
        while (true) {
            try {
                /*
                * 原本需要用戶輸入的camIndex(相機(jī)索引),修改為調(diào)用方法時(shí)傳參
                * 實(shí)際值從yml文件中獲取
                */
                //System.out.print("Please input camera index (-1 to quit):");
                //camIndex = scanner.nextInt();
                //camIndex = 1;
                
                if ((camIndex >= 0 && camIndex < stDeviceList.size()) || -1 == camIndex) {
                    // System.out.println("自動(dòng)連接 [camera 0]");
                    break;
                } else {
                    System.out.println("Input error: " + camIndex);
                    camIndex=-1;
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
                camIndex = -1;
                break;
            }
        }
        scanner.close();
        
		/**
		* 未修改代碼省略
		*/
    }

主方法

這里已經(jīng)不是main方法了,因?yàn)槭褂胹pringboot所以有了StartApplication類

    public static void mainImage(String savePath,Integer deleteDay,int camIndex) {
        int nRet = MV_OK;
        // int camIndex = -1;
        Handle hCamera = null;
        ArrayList<MV_CC_DEVICE_INFO> stDeviceList;
        boolean needConnectDevice = true;

        do {
            // Make sure that trigger mode is off
            /*
            * 設(shè)置拍照觸發(fā)器開關(guān) 出發(fā)模式需要到mvs客戶端中為相機(jī)設(shè)置
            * 這里需要把MvCameraControl.MV_CC_SetEnumValueByString()方法第三個(gè)參數(shù)從Off改為On
            */
            nRet = MvCameraControl.MV_CC_SetEnumValueByString(hCamera, "TriggerMode", "On");
            if (MV_OK != nRet) {
                System.err.printf("SetTriggerMode failed, errcode: [%#x]\n", nRet);
                break;
            }

            nRet = MvCameraControl.MV_CC_SaveImage(hCamera, stSaveParam);
            if (MV_OK != nRet) {
                //System.err.printf("SaveImage fail, errcode: [%#x]\n", nRet);
                // System.out.println(sfTime.format(new Date())+" "+ nRet + " No Image Need Save...");
                // break;
                //continue;
            } else {

                // 保存照片的方法 Save buffer content to file
                /**
                * 在這里設(shè)置照片的保存路徑
                */
                String savePathFull = savePath+ sfSave.format(new Date())+"/"+"camera"+camIndex+"/";
                saveDataToFile(imageBuffer, stSaveParam.imageLen, "SaveImage-" + sfSecond.format(new Date())+ ".jpeg",savePathFull);

                /* 
                * 有新圖片保存時(shí),刪除X天前保存圖片的文件夾
                * X的實(shí)際值,通過參數(shù)傳入
                */
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(new Date());
                // X天前的日期
                calendar.add(Calendar.DATE,(-deleteDay));
                String deleteFile = savePath+sfSave.format(calendar.getTime())+"/";
                FileUtil.deleteAllFile(deleteFile);
            }
        } while (true);
    }
FileUtil類處理過期照片

這里使用遞歸,刪除保存的照片

public class FileUtil {

    public static void deleteAllFile(String dir){
        File dirFile = new File(dir);
        // 判斷dir是否是目錄且dir是否存在
        if (!dirFile.exists()||(!dirFile.isDirectory())) {
            // System.out.println("目錄:"+dir+" 不存在");
            return;
        }
        // 刪除文件夾中所有的文件,包括子文件夾
        File[] files = dirFile.listFiles();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isFile()) {
                // 如果是文件直接刪除
                files[i].delete();
            }else if(files[i].isDirectory()){
                // 如果是目錄,則通過遞歸刪除
                deleteAllFile(files[i].getAbsolutePath());
            }
        }
        // 最后刪除當(dāng)前文件夾
        dirFile.delete();
    }
}
啟動(dòng)類與配置文件
application.yml
config-info:
  image: D:/JavaCode/testmaven34hikvision/catch-image/ #圖片保存路徑
  deleteDay: 3 #刪除X天前的圖片
  connectCamera: 0 #連接相機(jī)編號(hào)
通過實(shí)體類讀取yml
@ConfigurationProperties(prefix = "config-info")
@Component
public class ApplicationYml {
    private String image;
    private String deleteDay;
    private String connectCamera;

    public ApplicationYml() {
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getDeleteDay() {
        return deleteDay;
    }

    public void setDeleteDay(String deleteDay) {
        this.deleteDay = deleteDay;
    }

    public String getConnectCamera() {
        return connectCamera;
    }

    public void setConnectCamera(String connectCamera) {
        this.connectCamera = connectCamera;
    }
}
啟動(dòng)類
@SpringBootApplication
@EnableConfigurationProperties
public class StartImage {

    private static ApplicationYml applicationYml;

    @Autowired
    public void setApplicationYml(ApplicationYml applicationYml) {
        this.applicationYml = applicationYml;
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(StartImage.class, args);
        System.out.println("image: "+applicationYml.getImage());
        System.out.println("deleteDay: "+applicationYml.getDeleteDay());
        System.out.println("camera: "+applicationYml.getConnectCamera());
        String image = applicationYml.getImage();
        SaveImage.mainImage(image,Integer.valueOf(applicationYml.getDeleteDay()),Integer.valueOf(applicationYml.getConnectCamera()));
    }
}
SaveImage.java類全部代碼
public class SaveImage {
    private static SimpleDateFormat sfSecond = new SimpleDateFormat("yyyy-M-d_HH-mm-dd-SSS");

    private static SimpleDateFormat sfTime = new SimpleDateFormat("HH:mm:ss");

    private static SimpleDateFormat sfSave = new SimpleDateFormat("yyyy-M-d");

    private static void printDeviceInfo(MV_CC_DEVICE_INFO stDeviceInfo) {
        if (null == stDeviceInfo) {
            System.out.println("stDeviceInfo is null");
            return;
        }

        if (stDeviceInfo.transportLayerType == MV_GIGE_DEVICE) {
            System.out.println("\tCurrentIp:       " + stDeviceInfo.gigEInfo.currentIp);
            System.out.println("\tModel:           " + stDeviceInfo.gigEInfo.modelName);
            System.out.println("\tUserDefinedName: " + stDeviceInfo.gigEInfo.userDefinedName);
        } else if (stDeviceInfo.transportLayerType == MV_USB_DEVICE) {
            System.out.println("\tUserDefinedName: " + stDeviceInfo.usb3VInfo.userDefinedName);
            System.out.println("\tSerial Number:   " + stDeviceInfo.usb3VInfo.serialNumber);
            System.out.println("\tDevice Number:   " + stDeviceInfo.usb3VInfo.deviceNumber);
        } else {
            System.err.print("Device is not supported! \n");
        }

        System.out.println("\tAccessible:      " + MvCameraControl.MV_CC_IsDeviceAccessible(stDeviceInfo, MV_ACCESS_Exclusive));
        System.out.println("");
    }

    private static void printFrameInfo(MV_FRAME_OUT_INFO stFrameInfo) {
        if (null == stFrameInfo) {
            System.err.println("stFrameInfo is null");
            return;
        }

        StringBuilder frameInfo = new StringBuilder("");
        frameInfo.append(("\tFrameNum[" + stFrameInfo.frameNum + "]"));
        frameInfo.append("\tWidth[" + stFrameInfo.width + "]");
        frameInfo.append("\tHeight[" + stFrameInfo.height + "]");
        frameInfo.append(String.format("\tPixelType[%#x]", stFrameInfo.pixelType.getnValue()));

        // System.out.println(frameInfo.toString());
    }

    public static void saveDataToFile(byte[] dataToSave, int dataSize, String fileName,String savePath) {
        OutputStream os = null;

        try {
            // Create directory
            //File tempFile = new File(imagePathFun());
            File tempFile = new File(savePath);
            if (!tempFile.exists()) {
                tempFile.mkdirs();
            }

            os = new FileOutputStream(tempFile.getPath() + File.separator + fileName);
            os.write(dataToSave, 0, dataSize);
            System.out.println("--- " + sfTime.format(new Date()) + " Save Image succeed ---");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // Close file stream
            try {
                os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static int chooseCamera(ArrayList<MV_CC_DEVICE_INFO> stDeviceList,int camIndex) {
        if (null == stDeviceList) {
            return -1;
        }

        // Choose a device to operate
        //int camIndex = -1;
        Scanner scanner = new Scanner(System.in);

        while (true) {
            try {
                //System.out.print("Please input camera index (-1 to quit):");
                //camIndex = scanner.nextInt();
                //camIndex = 1;
                if ((camIndex >= 0 && camIndex < stDeviceList.size()) || -1 == camIndex) {
                    // System.out.println("自動(dòng)連接 [camera 0]");
                    break;
                } else {
                    System.out.println("Input error: " + camIndex);
                    camIndex=-1;
                    break;
                }
            } catch (Exception e) {
                e.printStackTrace();
                camIndex = -1;
                break;
            }
        }
        scanner.close();

        if (-1 == camIndex) {
            System.out.println("Bye.");
            return camIndex;
        }

        if (0 <= camIndex && stDeviceList.size() > camIndex) {
            if (MV_GIGE_DEVICE == stDeviceList.get(camIndex).transportLayerType) {
                System.out.println("Connect to camera[" + camIndex + "]: " + stDeviceList.get(camIndex).gigEInfo.userDefinedName);
            } else if (MV_USB_DEVICE == stDeviceList.get(camIndex).transportLayerType) {
                System.out.println("Connect to camera[" + camIndex + "]: " + stDeviceList.get(camIndex).usb3VInfo.userDefinedName);
            } else {
                System.out.println("Device is not supported.");
            }
        } else {
            System.out.println("Invalid index " + camIndex);
            camIndex = -1;
        }

        return camIndex;
    }

    public static void mainImage(String savePath,Integer deleteDay,int camIndex) {
        int nRet = MV_OK;
        // int camIndex = -1;
        Handle hCamera = null;
        ArrayList<MV_CC_DEVICE_INFO> stDeviceList;
        boolean needConnectDevice = true;

        do {

            if (needConnectDevice) {
                System.out.println("SDK Version " + MvCameraControl.MV_CC_GetSDKVersion());
                // Enuerate GigE and USB devices
                try {
                    stDeviceList = MV_CC_EnumDevices(MV_GIGE_DEVICE | MV_USB_DEVICE);
                    if (0 >= stDeviceList.size()) {
                        System.out.println("No devices found!");
                        break;
                    }
                    int i = 0;
                    for (MV_CC_DEVICE_INFO stDeviceInfo : stDeviceList) {
                        System.out.println("[camera " + (i++) + "]");
                        printDeviceInfo(stDeviceInfo);
                    }
                } catch (CameraControlException e) {
                    System.err.println("Enumrate devices failed!" + e.toString());
                    e.printStackTrace();
                    break;
                }

                // choose camera
                camIndex = chooseCamera(stDeviceList,camIndex);
                if (camIndex == -1) {
                    break;
                }

                // Create handle
                try {
                    hCamera = MvCameraControl.MV_CC_CreateHandle(stDeviceList.get(camIndex));
                } catch (CameraControlException e) {
                    System.err.println("Create handle failed!" + e.toString());
                    e.printStackTrace();
                    hCamera = null;
                    break;
                }

                // Open device
                nRet = MvCameraControl.MV_CC_OpenDevice(hCamera);
                if (MV_OK != nRet) {
                    System.err.printf("Connect to camera failed, errcode: [%#x]\n", nRet);
                    break;
                }
                needConnectDevice = false;
            }

            /*
            測(cè)試線路選擇器
             */

            // Make sure that trigger mode is off
            nRet = MvCameraControl.MV_CC_SetEnumValueByString(hCamera, "TriggerMode", "On");
            if (MV_OK != nRet) {
                System.err.printf("SetTriggerMode failed, errcode: [%#x]\n", nRet);
                break;
            }

            // Get payload size
            MVCC_INTVALUE stParam = new MVCC_INTVALUE();
            nRet = MvCameraControl.MV_CC_GetIntValue(hCamera, "PayloadSize", stParam);
            if (MV_OK != nRet) {
                System.err.printf("Get PayloadSize fail, errcode: [%#x]\n", nRet);
                break;
            }

            // Start grabbing
            nRet = MvCameraControl.MV_CC_StartGrabbing(hCamera);
            if (MV_OK != nRet) {
                System.err.printf("Start Grabbing fail, errcode: [%#x]\n", nRet);
                break;
            }

            // Get one frame
            MV_FRAME_OUT_INFO stImageInfo = new MV_FRAME_OUT_INFO();
            byte[] pData = new byte[(int) stParam.curValue];
            nRet = MvCameraControl.MV_CC_GetOneFrameTimeout(hCamera, pData, stImageInfo, 1000);
            if (MV_OK != nRet) {
                System.err.printf("GetOneFrameTimeout fail, errcode:[%#x]\n", nRet);
                break;
            }

            // System.out.println("GetOneFrame: ");
            printFrameInfo(stImageInfo);
            int imageLen = stImageInfo.width * stImageInfo.height * 3;    // Every RGB pixel takes 3 bytes
            byte[] imageBuffer = new byte[imageLen];

            // Call MV_CC_SaveImage to save image as JPEG
            MV_SAVE_IMAGE_PARAM stSaveParam = new MV_SAVE_IMAGE_PARAM();
            stSaveParam.width = stImageInfo.width;                                  // image width
            stSaveParam.height = stImageInfo.height;                                // image height
            stSaveParam.data = pData;                                               // image data
            stSaveParam.dataLen = stImageInfo.frameLen;                             // image data length
            stSaveParam.pixelType = stImageInfo.pixelType;                          // image pixel format
            stSaveParam.imageBuffer = imageBuffer;                                  // output image buffer
            stSaveParam.imageType = MV_SAVE_IAMGE_TYPE.MV_Image_Jpeg;               // output image pixel format
            stSaveParam.methodValue = 0;                                            // Interpolation method that converts Bayer format to RGB24.  0-Neareast 1-double linear 2-Hamilton
            stSaveParam.jpgQuality = 60;                                            // JPG endoding quality(50-99]

            nRet = MvCameraControl.MV_CC_SaveImage(hCamera, stSaveParam);
            if (MV_OK != nRet) {
                //System.err.printf("SaveImage fail, errcode: [%#x]\n", nRet);
                // System.out.println(sfTime.format(new Date())+" "+ nRet + " No Image Need Save...");
                // break;
                //continue;
            } else {

                // 保存照片的方法 Save buffer content to file
                String savePathFull = savePath+ sfSave.format(new Date())+"/"+"camera"+camIndex+"/";
                saveDataToFile(imageBuffer, stSaveParam.imageLen, "SaveImage-" + sfSecond.format(new Date())+ ".jpeg",savePathFull);

                // 有新圖片保存時(shí),刪除X天前保存圖片的文件夾
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(new Date());
                // X天前的日期
                calendar.add(Calendar.DATE,(-deleteDay));
                String deleteFile = savePath+sfSave.format(calendar.getTime())+"/";
                FileUtil.deleteAllFile(deleteFile);

            }
            // Stop grabbing
            nRet = MvCameraControl.MV_CC_StopGrabbing(hCamera);
            if (MV_OK != nRet) {
                System.err.printf("StopGrabbing fail, errcode: [%#x]\n", nRet);
                break;
            }


            //            try {
            //                Thread.sleep(1000);
            //            } catch (InterruptedException e) {
            //                e.printStackTrace();
            //            }

        } while (true);

        if (null != hCamera) {
            // Destroy handle
            nRet = MvCameraControl.MV_CC_DestroyHandle(hCamera);
            if (MV_OK != nRet) {
                System.err.printf("DestroyHandle failed, errcode: [%#x]\n", nRet);
            }
        }
    }

    /**
     * 根據(jù)年月日計(jì)算圖片的路徑
     * @return
     */
    private static String imagePathFun(){
        SimpleDateFormat sfDate = new SimpleDateFormat("yyyy-M-d");
        return "/home/hello/MVS/catch_image/"+sfDate.format(new Date())+"/";
    }
}

運(yùn)行結(jié)果

??低晄dk開發(fā),代碼,項(xiàng)目,數(shù)碼相機(jī),java,開發(fā)語言
??低晄dk開發(fā),代碼,項(xiàng)目,數(shù)碼相機(jī),java,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-861590.html

到了這里,關(guān)于??低曄鄼C(jī)SDK二次開發(fā)(JAVA語言)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ??低暪I(yè)相機(jī)Linux SDK開發(fā)指南詳細(xì)步驟(Ubuntu20.04+單目、雙目相機(jī)單次、連續(xù)拍照)

    ??低暪I(yè)相機(jī)Linux SDK開發(fā)指南詳細(xì)步驟(Ubuntu20.04+單目、雙目相機(jī)單次、連續(xù)拍照)

    由于實(shí)驗(yàn)需要使用雙目相機(jī)同步采集圖像,實(shí)驗(yàn)室準(zhǔn)備的設(shè)備是海康威視的工業(yè)相機(jī),對(duì)其進(jìn)行二次開發(fā),其中花了大部分時(shí)間查找資料,以及代碼進(jìn)行反復(fù)調(diào)試,最后到達(dá)了想要的效果,并寫博客記錄一下。 首先是資料的查找,我們要注意的是??低曇还灿袃蓚€(gè)官網(wǎng),一

    2024年02月16日
    瀏覽(252)
  • 【項(xiàng)目實(shí)踐】??低暪I(yè)相機(jī)SDK開發(fā)小白版入門教程(VS2015+OpenCV4.5.1)

    【項(xiàng)目實(shí)踐】??低暪I(yè)相機(jī)SDK開發(fā)小白版入門教程(VS2015+OpenCV4.5.1)

    ??由于學(xué)校要求暑期實(shí)習(xí),于是找了一位學(xué)長開的公司,接了一個(gè)項(xiàng)目,是 對(duì)海康威視工業(yè)相機(jī)(MV_CE200_10GM)進(jìn)行二次開發(fā),讀取其圖像并做分析處理。 于是花了一點(diǎn)時(shí)間查找的相關(guān)資料并記錄一些 入門要點(diǎn) 。 ??想先說說一些 “嘗試授人與漁” 的話,也是自己的一

    2024年02月04日
    瀏覽(39)
  • ??低暠O(jiān)控相機(jī)的SDK與opencv調(diào)用(非工業(yè)相機(jī))

    海康威視監(jiān)控相機(jī)的SDK與opencv調(diào)用(非工業(yè)相機(jī))

    本篇主要對(duì)??低暤谋O(jiān)控相機(jī)的SDK回調(diào)進(jìn)行研究,并于opencv結(jié)合,保存圖像,以供后續(xù)其他處理,開發(fā)語言為C++ 2.1 ??礢DK介紹 ??礢DK下載地址 根據(jù)自身編譯環(huán)境,下載對(duì)應(yīng)的SDK,需要注意的是,不要和工業(yè)相機(jī)SDK相混淆,工業(yè)相機(jī)好像是MVS是什么玩意兒,現(xiàn)在暫時(shí)沒研究

    2024年02月04日
    瀏覽(39)
  • ??迪鄼C(jī)開發(fā):SDK安裝和ARM開發(fā)

    在??迪鄼C(jī)開發(fā)過程中,首先需要進(jìn)行SDK的安裝和ARM平臺(tái)的開發(fā)。本文將詳細(xì)介紹如何安裝海康相機(jī)SDK并進(jìn)行ARM開發(fā),包括安裝步驟和相關(guān)源代碼。 一、SDK安裝步驟: 下載SDK:訪問??倒俜骄W(wǎng)站,找到相機(jī)SDK的下載頁面,根據(jù)所需的平臺(tái)選擇合適的SDK版本進(jìn)行下載。 安裝

    2024年02月03日
    瀏覽(132)
  • C# 上位機(jī)之??迪鄼C(jī)開發(fā)(SDK)

    C# 上位機(jī)之海康相機(jī)開發(fā)(SDK)

    發(fā)現(xiàn)工作中好多計(jì)算機(jī)視覺上位機(jī)項(xiàng)目都用??迪鄼C(jī),為了能夠更好的學(xué)習(xí)和工作,我自己依據(jù)同事的源碼和網(wǎng)上的一些總結(jié)編寫本博客。通過本次學(xué)習(xí),讓我明白一點(diǎn),無論學(xué)習(xí)什么技術(shù)都要學(xué)會(huì)自己看技術(shù)文檔,而不是第一時(shí)間上網(wǎng)找源碼。以工業(yè)相機(jī)SDK使用說明.chm為例

    2024年02月03日
    瀏覽(33)
  • (一)Qt+OpenCV調(diào)用??倒I(yè)相機(jī)SDK示例開發(fā)

    (一)Qt+OpenCV調(diào)用??倒I(yè)相機(jī)SDK示例開發(fā)

    提示:這里是該系列文章的所有文章的目錄 第一章: (一)Qt+OpenCV調(diào)用??倒I(yè)相機(jī)SDK示例開發(fā) 第二章: (二)Qt多線程實(shí)現(xiàn)海康工業(yè)相機(jī)圖像實(shí)時(shí)采集 近期在Qt環(huán)境下進(jìn)行??倒I(yè)相機(jī)的使用開發(fā),發(fā)現(xiàn)海康提供的示例沒有Qt的demo,而其中有基于MFC框架的示例,所以在這

    2024年02月03日
    瀏覽(150)
  • 基于海康SDK實(shí)現(xiàn)Python調(diào)用??低暰W(wǎng)絡(luò)攝像頭

    基于??礢DK實(shí)現(xiàn)Python調(diào)用海康威視網(wǎng)絡(luò)攝像頭

    本文參考博客,寫得很好: Python調(diào)用??低暰W(wǎng)絡(luò)相機(jī)之——python調(diào)用??低旵++的SDK Python調(diào)用海康威視網(wǎng)絡(luò)相機(jī)C++的SDK 寫本文的目的,也是快速復(fù)盤,所以沒有很詳細(xì) 保存視頻流到本地可參考下一篇:基于??礢DK實(shí)現(xiàn)Python保存??低暰W(wǎng)絡(luò)攝像頭拍攝的視頻 Windows11 Vis

    2024年02月02日
    瀏覽(54)
  • Dalsa線掃相機(jī)SDK二次開發(fā)

    要用回調(diào)函數(shù)取圖:

    2024年02月12日
    瀏覽(25)
  • 海康威視SDK視頻錄制及強(qiáng)制I幀操作

    ??低昐DK視頻錄制及強(qiáng)制I幀操作

    使用下面方法可以實(shí)現(xiàn)視頻錄像功能。 該方法有個(gè)問題,視頻可以錄制,但是不能被前端頁面直接加載播放,因?yàn)橐曨l編碼格式問題,雖然可以用FFMPEG工具進(jìn)行格式轉(zhuǎn)化,但是引入第三方的庫,無疑會(huì)使代碼的維護(hù)性降低。 FFMPEG工具 地址 提取碼 zc14 使用FFmpeg進(jìn)行轉(zhuǎn)換的方法

    2023年04月24日
    瀏覽(40)
  • 巴斯勒相機(jī)基于SDK 二次開發(fā)C++程序

    巴斯勒相機(jī)在VS中如何進(jìn)行連接調(diào)用呢(軟觸發(fā)調(diào)用) 1.查找巴斯勒相機(jī)網(wǎng)口; 2.調(diào)用巴斯勒相機(jī)提供的接口,連接巴斯勒相機(jī); 3.初始化相機(jī); (安裝巴斯勒相機(jī)軟件) 其他引用第三方庫以及對(duì)應(yīng)頭文件 鏈接:https://pan.quark.cn/s/71bb1b3e0dad 提取碼:JfM9

    2024年04月14日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包