Я вызываю скрипт Python, используя функцию php System ().
Скрипт Python реализует вычитание переднего плана с использованием библиотеки OpenCv. Я загружаю изображение, используя запрос Post, а затем передаю файл в скрипт.
Следующие вещи выполняются в коде
1. Uploading file through Post request.
2. Passing the file to Python Script
3. Script reads the file, implements the
Foreground subtraction algorithm
and saves this to a new file.
Я тестирую эту программу, используя два изображения, 1500 * 701 пикселей и 2368 * 4208 пикселей.
Все работает нормально для изображения с низким разрешением. Но для изображения с высоким разрешением скрипт Python продолжает выходить.
Код php.
system("python /var/www/html/wowflux/public/scripts/test.py",$ret_val);
var_dump($ret_val);
Скрипт Python
import numpy as np
import cv2
import math
import os
import sys
from sys import path
from matplotlib import pyplot as plt
##test_image = cv2.imread(sys.argv[1])
test_image = cv2.imread("/var/www/html/wowflux/public/test.jpg")
e1 = cv2.getTickCount()
height, width, channels = test_image.shape
h = int(height*0.8)
w = int(width*0.8)
x = int((width-w)/2)
y = int((height-h)/2)
mask = np.zeros((height,width),dtype='uint8')
rect = (x,y,w,h)
bgdModel = np.zeros((1,65),np.float64)
fgdModel = np.zeros((1,65),np.float64)
##tmp1 = np.zeros((1, 13 * 5))
##tmp2 = np.zeros((1, 13 * 5))
cv2.grabCut(test_image,mask,rect,bgdModel,fgdModel,2,mode=cv2.
GC_INIT_WITH_REC T)\
mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8')
test_image = test_image*mask2[:,:,np.newaxis]
cv2.imwrite("/var/www/html/wowflux/public/test1.jpg",test_image)
e2 = cv2.getTickCount()
time = (e2 - e1)/ cv2.getTickFrequency()
print time
В целях тестирования я уже сохранил файл и просто тестирую скрипт на python. Здесь я тоже сталкиваюсь с той же проблемой.
На моем локальном хосте программа работает нормально для обоих изображений. Я столкнулся с проблемой на экземпляре Amazon-EC2, и это тоже для изображения с высоким разрешением.
Для изображения с высоким разрешением, если я закомментирую код для вычитания переднего плана, время печатается. Таким образом, можно предположить, что проблема заключается в выполнении вычитания переднего плана для изображения с высоким разрешением.
Задача ещё не решена.
Других решений пока нет …