Emanuel Silva 0 Posted March 28, 2021 Hello guys! I'm using Delphi 10.4.2 and Python4Delphi with Python 3.9.2 Win64 I have the error "Access Violation at address in module python39.dll" the error continues even in the property of PythonEngine.DllName = python39.dll and PythonEngine.DllName = C:\Users\Administrator\AppData\Local\Programs\Python\Python39 a curiosity is that my code is running in VS Studio. can anybody help me ? Thanks my code: unit Unit1; interface uses Classes, SysUtils, Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, PythonEngine, Vcl.PythonGUIInputOutput, SynEditHighlighter, SynEditCodeFolding, SynHighlighterPython, SynEditPythonBehaviour, SynEdit; type TForm1 = class(TForm) Memo1: TMemo; Panel1: TPanel; Button1: TButton; Splitter1: TSplitter; Button2: TButton; Button3: TButton; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; PythonGUIInputOutput1: TPythonGUIInputOutput; SynEdit1: TSynEdit; SynEditPythonBehaviour1: TSynEditPythonBehaviour; SynPythonSyn1: TSynPythonSyn; PythonEngine1: TPythonEngine; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin GetPythonEngine.ExecString(UTF8Encode(SynEdit1.Text)); end; procedure TForm1.Button2Click(Sender: TObject); begin with OpenDialog1 do begin if Execute then Memo1.Lines.LoadFromFile(FileName); end; end; code python: import sysconfig import sys from cv2 import cv2 import pathlib import os import numpy as np import matplotlib.pyplot as plt from PIL import Image, ImageDraw import random import shutil import zipfile from tqdm import tqdm import torch import torchvision from torch.utils.data import DataLoader, Dataset from torchvision.datasets import ImageFolder from torchvision import transforms import random from time import time from torch.utils.data import random_split caminho_do_modelo_no_google_drive = r'C:\Users\300.pt' model = torch.load(caminho_do_modelo_no_google_drive, map_location='cpu') lista_violento = list(pathlib.Path(r'C:\cam2').glob('*')) lista_nao_violento = list(pathlib.Path(r'C:\cam1').glob('*')) print ('Quantidade de Vídeos Violentos:',len(lista_violento)) print ('Quantidade de Vídeos Não Violentos:',len(lista_nao_violento)) transformer = transforms.Compose([ transforms.Resize(150), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) vetor_classes = ['non-violent', 'violent'] def retirar_frame_a_frame_e_fazer_predicoes_e_plotar(path_video, y_true): violent_count = 0 non_violent_count = 0 contador = 0 vetor_probs = [] vetor_labels = [] vetor_imagens = [] cap = cv2.VideoCapture(path_video) while (cap.isOpened()): ret, frame = cap.read() if (ret == False): break img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) img_pil = Image.fromarray(img) vetor_imagens.append(img_pil) img_tensor = transformer(img_pil) img_tensor.unsqueeze_(0) resultado = model.forward(img_tensor) probs = torch.exp(resultado) probs = probs.max(1) probabilidade = probs[0].detach().numpy()[0] vetor_probs.append(probabilidade) label_predita = probs[1].detach().numpy()[0] vetor_labels.append(label_predita) contador += 1 if (label_predita == 1): violent_count += 1 else: non_violent_count += 1 taxa_frames_violentos = 100*violent_count/contador taxa_frames_nao_violentos = 100*non_violent_count/contador plt.figure(figsize=(15, 10)) for k in range(9): plt.subplot(3, 3, k+1) n = random.randint(0, len(vetor_probs)-1) img = vetor_imagens[n] label = vetor_labels[n] plt.imshow(img) plt.xticks([]) plt.yticks([]) plt.title('Real: {0}\nPredito: {1}'.format(vetor_classes[y_true], vetor_classes[label])) plt.show() return np.array(vetor_probs), np.array(vetor_labels), taxa_frames_violentos, taxa_frames_nao_violentos model.to('cpu') model.eval() video = str(random.choice(lista_nao_violento)) print ('Para o vídeo: ' + video) vetor_probs, vetor_labels, taxa_frames_violentos, taxa_frames_nao_violentos = retirar_frame_a_frame_e_fazer_predicoes_e_plotar(video, 1) print ('taxa frames 1: {0:.2f}'.format(taxa_frames_nao_violentos)) print ('taxa frames 2: {0:.2f}'.format(taxa_frames_violentos)) #, sys.path sys.executable #print(sys.version) Share this post Link to post
pyscripter 689 Posted March 29, 2021 (edited) Have you seen the last comment in AttributeError: partially initialized module 'cv2' has no attribute 'VideoCapture' · Issue #303 · pyscripter/python4delphi (github.com) I am not sure whether specifying the dependency with a manifest file as in P4DPython26 · pyscripter/python4delphi Wiki (github.com) might help. A minimal script reproducing the error would be a lot more helpful instead of your long python script. Edited March 29, 2021 by pyscripter Share this post Link to post
Emanuel Silva 0 Posted March 30, 2021 Thank you very much for your attention ... It worked with MaskFPUExceptions in link: https://github.com/pyscripter/python4delphi/wiki/MaskFPUExceptions Share this post Link to post