nous utilisons canon eos sdk 2.14 pour faire du streaming en direct et tirer. appareil photo est canon 1200DL'appareil photo Canon est coincé après un certain temps - 1200D EOS sdk java
ci-dessous sont le réglage de la caméra:
mode streaming en direct: activé
Mode AF: Flexi
ci-dessous est le code
import java.awt.image.BufferedImage;
import java.io.File;
import javax.swing.ImageIcon;
import javax.swing.SwingWorker;
import edsdk.api.CanonCamera;
import edsdk.api.commands.FocusModeCommand.Mode;
public class CameraWorker {
static CanonCamera camera = null;
public SwingWorker<Void, Void> liveViewWorker = null, shootWorker = null;
public void startCameraLive() {
try {
camera = new CanonCamera();
if (camera != null && camera.openSession()) {
if (camera.beginLiveView()) {
camera.setFocusMode(Mode.AUTO);
camera.setLiveViewMode(true);
liveViewWorker = new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
try {
while (continueLoop) {
try {
Thread.sleep(100);
camera.setLiveViewMode(true);
final BufferedImage image = camera.downloadLiveView();
if (image != null) {
///set image to live view
}else{
System.out.println("NO LIVE VIEW>>>>>>>>>>>>>>>>>>>>>>");
}
} catch (Exception e) {
System.out.println("Exception Occured while getting Live View....");
e.printStackTrace();
}
}
} catch (Exception e2) {
e2.printStackTrace();
}
return null;
}
protected void done() {
try {
camera.endLiveView();
camera.closeSession();
} catch (Exception e) {
e.printStackTrace();
}
}
};
liveViewWorker.execute();
}else{
System.out.println("Live View not started.....");
}
}
} catch(Exception e){
e.printStackTrace();
}
}
public void onFaceCapture() {
shootWorker = new SwingWorker<Void, Void>() {
BufferedImage croppedFaceImage;
@Override
protected Void doInBackground() throws Exception {
File[] camPictures = camera.shoot();
if (camPictures != null && camPictures.length > 0) {
for (File curFile : camPictures){
try {
byte[] imageBuffer = FileNDirUtils.getFileBytes(curFile.getAbsolutePath());
}catch(Exception e1){
System.out.println("ERRORR:::::::::>>>>>>>>"+e1.getMessage());
}
}
}else{
System.out.println("camPictures Null");
}
return null;
}
protected void done() {
try {
////////set final image to display
} catch(Exception e1){
System.out.println("ERRORR:::::::::>>>>>>>>"+e1.getMessage() +" reason ::: "+e1.getCause());
e1.printStackTrace();
}
finally {
System.out.println("Done in finally........1");
}
}
};
shootWorker.execute();
}
}
Dans le code ci-dessus j'ai deux méthodes
- startCameraLive()
- onFaceCapture()
première im à partir de la vue en direct et d'afficher l'image téléchargée en continu et lorsque l'utilisateur clique sur la capture bouton la seconde méthode sera exécutée. Les deux méthodes sont invoquées comme ci-dessous
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
loop = true;
cameraWorker = new CameraWorker();
cameraWorker.startCameraLive();
}
});
deuxième méthode comme celui-ci
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
timerDisplay.setVisible(false);
face_position_msg.setVisible(false);
cameraWorker = new CameraWorker();
cameraWorker.onFaceCapture();
}
});
maintenant le problème ::::
après 5 ou 6 itérations la caméra se coince et rien est fonctionnel. tout gèle et après la fermeture de l'application et le redémarrage de l'application, il ne fonctionne pas. nous devons débrancher l'appareil photo ou appuyer manuellement sur le bouton de capture de l'appareil photo pour recommencer à travailler.
Le mode de diffusion en direct qui est activé au début devient automatiquement désactivé. nous devons le redéfinir.
dans startCameraLive(), nous fixons :::
camera.setFocusMode (Mode.AUTO);
camera.setLiveViewMode (true); Cependant, lorsque l'appareil photo est bloqué, le mode d'affichage en direct est désactivé. Comment pouvons-nous nous débarrasser de ce coincé et nous aimerions savoir quelle est la cause première de ce problème. il ne fait pas exception à tous :(
S'il vous plaît aider ...