def test_indico_api_image_extractor(): ext = IndicoAPIImageExtractor(api_key=os.environ['INDICO_APP_KEY'], models=['fer', 'content_filtering']) stim1 = ImageStim(join(IMAGE_DIR, 'apple.jpg')) result1 = merge_results(ext.transform([stim1, stim1]), extractor_names=False) outdfKeysCheck = { 'object_id', 'fer_Surprise', 'fer_Neutral', 'fer_Sad', 'fer_Happy', 'fer_Angry', 'fer_Fear', 'content_filtering' } meta_columns = { 'source_file', 'history', 'class', 'filename', 'onset', 'duration', 'order' } assert set(result1.columns) - set(['stim_name' ]) == outdfKeysCheck | meta_columns assert result1['content_filtering'][0] < 0.2 stim2 = ImageStim(join(IMAGE_DIR, 'obama.jpg')) result2 = ext.transform(stim2).to_df(timing=False, object_id=True) assert set(result2.columns) == outdfKeysCheck assert result2['fer_Happy'][0] > 0.7 url = 'https://via.placeholder.com/350x150' stim = ImageStim(url=url) result = ext.transform(stim).to_df() assert result['fer_Neutral'][0] > 0.
def test_clarifai_api_extractor(): stim = ImageStim(join(IMAGE_DIR, 'apple.jpg')) ext = ClarifaiAPIExtractor() assert ext.validate_keys() result = ext.transform(stim).to_df() assert result['apple'][0] > 0.5 assert result.ix[:, 5][0] > 0.0 result = ClarifaiAPIExtractor(max_concepts=5).transform(stim).to_df() assert result.shape == (1, 9) result = ClarifaiAPIExtractor(min_value=0.9).transform(stim).to_df( object_id=False) assert all(np.isnan(d) or d > 0.9 for d in result.values[0, 3:]) concepts = ['cat', 'dog'] result = ClarifaiAPIExtractor(select_concepts=concepts).transform(stim) result = result.to_df() assert result.shape == (1, 6) assert 'cat' in result.columns and 'dog' in result.columns url = 'https://tuition.utexas.edu/sites/all/themes/tuition/logo.png' stim = ImageStim(url=url) result = ClarifaiAPIExtractor(max_concepts=5).transform(stim).to_df() assert result.shape == (1, 9) assert result['symbol'][0] > 0.8 ext = ClarifaiAPIExtractor(api_key='nogood') assert not ext.validate_keys()
def test_clarifai_api_extractor(): stim = ImageStim(join(IMAGE_DIR, 'apple.jpg')) ext = ClarifaiAPIImageExtractor() assert ext.validate_keys() result = ext.transform(stim).to_df() assert result['apple'][0] > 0.5 assert result.ix[:, 5][0] > 0.0 result = ClarifaiAPIImageExtractor(max_concepts=5).transform(stim).to_df() assert result.shape == (1, 9) result = ClarifaiAPIImageExtractor(min_value=0.9).transform(stim).to_df( object_id=False) assert all(np.isnan(d) or d > 0.9 for d in result.values[0, 3:]) concepts = ['cat', 'dog'] result = ClarifaiAPIImageExtractor( select_concepts=concepts).transform(stim) result = result.to_df() assert result.shape == (1, 6) assert 'cat' in result.columns and 'dog' in result.columns url = 'https://via.placeholder.com/350x150' stim = ImageStim(url=url) result = ClarifaiAPIImageExtractor(max_concepts=5).transform(stim).to_df() assert result.shape == (1, 9) assert result['graphic'][0] > 0.8 ext = ClarifaiAPIImageExtractor(api_key='nogood') assert not ext.validate_keys()
def test_google_vision_face_batch(): obama_file = join(get_test_data_path(), 'image', 'obama.jpg') people_file = join(get_test_data_path(), 'image', 'thai_people.jpg') stims = [ImageStim(obama_file), ImageStim(people_file)] ext = GoogleVisionAPIFaceExtractor(handle_annotations='first') result = ext.transform(stims) result = ExtractorResult.merge_stims(result) assert 'joyLikelihood' in result.columns assert result['joyLikelihood'][0] == 'VERY_LIKELY' assert result['joyLikelihood'][1] == 'VERY_LIKELY' video = VideoStim(join(get_test_data_path(), 'video', 'obama_speech.mp4')) conv = FrameSamplingFilter(every=10) video = conv.transform(video) result = ext.transform(video) result = ExtractorResult.merge_stims(result) assert 'joyLikelihood' in result.columns assert result.shape == (11, 137) video = VideoStim(join(get_test_data_path(), 'video', 'small.mp4')) video = conv.transform(video) result = ext.transform(video) result = ExtractorResult.merge_stims(result) assert 'joyLikelihood' not in result.columns assert result.shape == (17, 7)
def test_indico_api_image_extractor(): ext = IndicoAPIImageExtractor(api_key=os.environ['INDICO_APP_KEY'], models=['fer', 'content_filtering']) image_dir = join(get_test_data_path(), 'image') stim1 = ImageStim(join(image_dir, 'apple.jpg')) result1 = ext.transform(stim1).to_df() outdfKeysCheck = set(['onset', 'duration', 'fer_Surprise', 'fer_Neutral', 'fer_Sad', 'fer_Happy', 'fer_Angry', 'fer_Fear', 'content_filtering']) assert set(result1.columns) == outdfKeysCheck assert result1['content_filtering'][0] < 0.1 stim2 = ImageStim(join(image_dir, 'obama.jpg')) result2 = ext.transform(stim2).to_df() assert set(result2.columns) == outdfKeysCheck assert result2['fer_Happy'][0] > 0.7
def test_indico_api_image_extractor(): ext = IndicoAPIImageExtractor(api_key=os.environ['INDICO_APP_KEY'], models=['fer', 'content_filtering']) image_dir = join(get_test_data_path(), 'image') stim1 = ImageStim(join(image_dir, 'apple.jpg')) result1 = ExtractorResult.merge_stims(ext.transform([stim1, stim1])) outdfKeysCheck = { 'onset', 'duration', 'fer_Surprise', 'fer_Neutral', 'fer_Sad', 'fer_Happy', 'fer_Angry', 'fer_Fear', 'content_filtering'} meta_columns = {'source_file', 'history', 'class', 'filename'} assert set(result1.columns) - set(['stim_name']) == outdfKeysCheck | meta_columns assert result1['content_filtering'][0] < 0.2 stim2 = ImageStim(join(image_dir, 'obama.jpg')) result2 = ext.transform(stim2).to_df() assert set(result2.columns) == outdfKeysCheck assert result2['fer_Happy'][0] > 0.7
def test_compound_stim(): audio_dir = join(get_test_data_path(), 'audio') audio = AudioStim(join(audio_dir, 'crowd.mp3')) image1 = ImageStim(join(get_test_data_path(), 'image', 'apple.jpg')) image2 = ImageStim(join(get_test_data_path(), 'image', 'obama.jpg')) filename = join(get_test_data_path(), 'video', 'small.mp4') video = VideoStim(filename) text = ComplexTextStim(text="The quick brown fox jumped...") stim = CompoundStim([audio, image1, image2, video, text]) assert len(stim.elements) == 5 assert isinstance(stim.video, VideoStim) assert isinstance(stim.complex_text, ComplexTextStim) assert isinstance(stim.image, ImageStim) with pytest.raises(AttributeError): stim.nonexistent_type assert stim.video_frame is None # Test iteration len([e for e in stim]) == 5 imgs = stim.get_stim(ImageStim, return_all=True) assert len(imgs) == 2 assert all([isinstance(im, ImageStim) for im in imgs]) also_imgs = stim.get_stim('image', return_all=True) assert imgs == also_imgs
def test_clarifai_api_extractor_batch(): stim = ImageStim(join(IMAGE_DIR, 'apple.jpg')) stim2 = ImageStim(join(IMAGE_DIR, 'obama.jpg')) ext = ClarifaiAPIImageExtractor() results = ext.transform([stim, stim2]) results = merge_results(results) assert results['ClarifaiAPIImageExtractor#apple'][0] > 0.5 or \ results['ClarifaiAPIImageExtractor#apple'][1] > 0.5
def test_clarifai_api_extractor_batch(): image_dir = join(get_test_data_path(), 'image') stim = ImageStim(join(image_dir, 'apple.jpg')) stim2 = ImageStim(join(image_dir, 'obama.jpg')) ext = ClarifaiAPIExtractor() results = ext.transform([stim, stim2]) results = merge_results(results) assert results['ClarifaiAPIExtractor#apple'][0] > 0.5 or \ results['ClarifaiAPIExtractor#apple'][1] > 0.5
def test_tfhub_image_reshape(): stim = ImageStim(join(IMAGE_DIR, 'apple.jpg')) stim2 = ImageStim(join(IMAGE_DIR, 'obama.jpg')) ext = TFHubImageExtractor(MNET_URL, reshape_input=(224, 224, 3), features='feature_vector') df = merge_results(ext.transform([stim, stim2]), extractor_names=False) assert df.shape[0] == 2 assert all([len(v) == 1280 for v in df['feature_vector']])
def test_implicit_stim_iteration(): np.random.seed(100) image_dir = join(get_test_data_path(), 'image') stim1 = ImageStim(join(image_dir, 'apple.jpg')) stim2 = ImageStim(join(image_dir, 'obama.jpg')) de = DummyExtractor() results = de.transform([stim1, stim2]) assert len(results) == 2 assert isinstance(results[0], ExtractorResult)
def test_indico_api_extractor_rate_limit(): stim = ImageStim(join(IMAGE_DIR, 'apple.jpg')) stim2 = ImageStim(join(IMAGE_DIR, 'obama.jpg')) ext = IndicoAPIImageExtractor(models=['fer'], rate_limit=5) ext._batch_size = 1 t1 = time.time() ext.transform([stim, stim2]) t2 = time.time() assert t2 - t1 >= 5
def test_transformations_on_compound_stim(): image1 = ImageStim(join(get_test_data_path(), 'image', 'apple.jpg')) image2 = ImageStim(join(get_test_data_path(), 'image', 'obama.jpg')) text = ComplexTextStim(text="The quick brown fox jumped...") stim = CompoundStim([image1, image2, text]) ext = BrightnessExtractor() results = ext.transform(stim) assert len(results) == 2 assert np.allclose(results[0].data[0], 0.88784294)
def test_image_stim_bytestring(): path = join(get_test_data_path(), 'image', 'apple.jpg') img = ImageStim(path) assert img._bytestring is None bs = img.get_bytestring() assert isinstance(bs, str) assert img._bytestring is not None raw = bs.encode() with open(path, 'rb') as f: assert raw == base64.b64encode(f.read())
def test_microsoft_vision_api_text_converter(): conv = MicrosoftAPITextConverter() img = ImageStim(join(IMAGE_DIR, 'button.jpg')) text = conv.transform(img).text assert 'Exit' in text conv = MicrosoftAPITextConverter() img = ImageStim(join(IMAGE_DIR, 'CC0', '28010844841_c5b81cb9cc_z.jpg')) text = conv.transform(img).text assert 'Santander\nSantander' in text
def test_merge_extractor_results_by_stims(): image_dir = join(get_test_data_path(), 'image') stim1 = ImageStim(join(image_dir, 'apple.jpg')) stim2 = ImageStim(join(image_dir, 'obama.jpg')) de = DummyExtractor() results = [de.transform(stim1), de.transform(stim2)] df = ExtractorResult.merge_stims(results) assert df.shape == (200, 6) assert set(df.columns.tolist()) == set(['onset', 'duration', 0, 1, 2, 'stim']) assert set(df['stim'].unique()) == set(['obama.jpg', 'apple.jpg'])
def test_image_stim_bytestring(): path = join(get_test_data_path(), 'image', 'apple.jpg') img = ImageStim(path) assert img._bytestring is None bs = img.get_bytestring() assert isinstance(bs, str) assert img._bytestring is not None raw = bs.encode() with open(path, 'rb') as f: assert raw == base64.b64encode(f.read())
def test_microsoft_vision_api_adult_extractor(): ext = MicrosoftVisionAPIAdultExtractor() img = ImageStim(join(IMAGE_DIR, 'apple.jpg')) res = ext.transform(img).to_df(timing=False, object_id=False) assert res.shape == (1, 4) assert res['adultScore'][0] < 0.5 img = ImageStim(join(IMAGE_DIR, 'CC0', '3333259349_0177d46bbf_z.jpg')) res = ext.transform(img).to_df(timing=False, object_id=False) assert res['adultScore'][0] > 0.1 assert res['racyScore'][0] > 0.1
def test_get_filename(): url = 'https://archive.org/download/999WavFiles/TANKEN.WAV' audio = AudioStim(url=url) with audio.get_filename() as filename: assert exists(filename) assert not exists(filename) url = 'https://archive.org/download/NIX-C-1987-11903/1987_11903L.jpg' image = ImageStim(url=url) with image.get_filename() as filename: assert exists(filename) assert not exists(filename)
def test_get_filename(): url = 'http://www.bobainsworth.com/wav/simpsons/themodyn.wav' audio = AudioStim(url=url) with audio.get_filename() as filename: assert exists(filename) assert not exists(filename) url = 'https://via.placeholder.com/350x150' image = ImageStim(url=url) with image.get_filename() as filename: assert exists(filename) assert not exists(filename)
def test_batch_transformer(): img1 = ImageStim(join(get_test_data_path(), 'image', 'apple.jpg')) img2 = ImageStim(join(get_test_data_path(), 'image', 'button.jpg')) img3 = ImageStim(join(get_test_data_path(), 'image', 'obama.jpg')) ext = DummyBatchExtractor() res = merge_results(ext.transform([img1, img2, img3])) assert ext.num_calls == 1 assert res.shape == (3, 10) ext = DummyBatchExtractor(batch_size=1) res2 = merge_results(ext.transform([img1, img2, img3])) assert ext.num_calls == 3 assert res.equals(res2)
def test_get_filename(): url = 'http://www.bobainsworth.com/wav/simpsons/themodyn.wav' audio = AudioStim(url=url) with audio.get_filename() as filename: assert exists(filename) assert not exists(filename) url = 'https://via.placeholder.com/350x150' image = ImageStim(url=url) with image.get_filename() as filename: assert exists(filename) assert not exists(filename)
def test_microsoft_vision_api_tag_extractor(): ext = MicrosoftVisionAPITagExtractor() img = ImageStim(join(IMAGE_DIR, 'apple.jpg')) res = ext.transform(img).to_df(timing=False, object_id=False) assert 'fruit' in res.columns assert 'apple' in res.columns assert res['apple'][0] > 0.7 url = 'https://tuition.utexas.edu/sites/all/themes/tuition/logo.png' stim = ImageStim(url=url) result = ext.transform(stim).to_df() assert result['plate'][0] > 0.1 # doesn't give great labels
def test_microsoft_vision_api_tag_extractor(): ext = MicrosoftVisionAPITagExtractor() img = ImageStim(join(IMAGE_DIR, 'apple.jpg')) res = ext.transform(img).to_df(timing=False, object_id=False) assert 'fruit' in res.columns assert 'apple' in res.columns assert res['apple'][0] > 0.7 url = 'https://via.placeholder.com/350x150' stim = ImageStim(url=url) result = ext.transform(stim).to_df() assert result['typography'][0] > 0.1
def test_get_filename(): url = 'http://www.bobainsworth.com/wav/simpsons/themodyn.wav' audio = AudioStim(url=url) with audio.get_filename() as filename: assert exists(filename) assert not exists(filename) url = 'https://tuition.utexas.edu/sites/all/themes/tuition/logo.png' image = ImageStim(url=url) with image.get_filename() as filename: assert exists(filename) assert not exists(filename)
def test_merge_extractor_results(): np.random.seed(100) image_dir = join(get_test_data_path(), 'image') stim1 = ImageStim(join(image_dir, 'apple.jpg')) stim2 = ImageStim(join(image_dir, 'obama.jpg')) de_names = ['Extractor1', 'Extractor2', 'Extractor3'] des = [DummyExtractor(name=name) for name in de_names] results = [de.transform(stim1) for de in des] results += [de.transform(stim2) for de in des] df = merge_results(results, format='wide') assert df.shape == (200, 18) cols = [ 'onset', 'duration', 'order', 'class', 'filename', 'history', 'stim_name', 'source_file' ] assert not set(cols) - set(df.columns) assert 'Extractor2#feature_3' in df.columns df = merge_results(results, format='wide', extractor_names='drop') assert df.shape == (200, 12) assert not set(cols) - set(df.columns) assert 'feature_3' in df.columns df = merge_results(results, format='wide', extractor_names='multi') assert df.shape == (200, 18) _cols = [(c, np.nan) for c in cols] assert not set(_cols) - set(df.columns) assert ('Extractor2', 'feature_3') in df.columns with pytest.raises(ValueError): merge_results(results, format='long', extractor_names='multi') df = merge_results(results, format='long', extractor_names='column') assert df.shape == (1800, 12) _cols = cols + ['feature', 'extractor', 'value'] assert not set(_cols) - set(df.columns) row = df.iloc[523, :] assert row['feature'] == 'feature_2' assert row['value'] == 475 assert row['extractor'] == 'Extractor1' df = merge_results(results, format='long', extractor_names='drop') assert df.shape == (1800, 11) assert set(_cols) - set(df.columns) == {'extractor'} df = merge_results(results, format='long', extractor_names='prepend') assert df.shape == (1800, 11) row = df.iloc[523, :] assert row['feature'] == 'Extractor1#feature_2'
def test_merge_extractor_results(): np.random.seed(100) image_dir = join(get_test_data_path(), 'image') stim1 = ImageStim(join(image_dir, 'apple.jpg')) stim2 = ImageStim(join(image_dir, 'obama.jpg')) de = DummyExtractor() de_names = ['Extractor1', 'Extractor2', 'Extractor3'] results = [de.transform(stim1, name) for name in de_names] results += [de.transform(stim2, name) for name in de_names] df = merge_results(results) assert df.shape == (355, 14) cols = ['onset', 'class', 'filename', 'history', 'stim'] assert df.columns.levels[0].unique().tolist() == de_names + cols assert df.columns.levels[1].unique().tolist() == ['duration', 0, 1, 2, ''] assert set(df['stim'].unique()) == set(['obama.jpg', 'apple.jpg'])
def test_microsoft_vision_api_category_extractor(): ext = MicrosoftVisionAPICategoryExtractor() img = ImageStim(join(IMAGE_DIR, 'obama.jpg')) res = ext.transform(img).to_df(timing=False, object_id=False) assert res.shape == (1, 1) assert 'people_portrait' in res.columns assert res['people_portrait'][0] > 0.5
def test_microsoft_vision_api_tag_extractor(): ext = MicrosoftVisionAPITagExtractor() img = ImageStim(join(IMAGE_DIR, 'apple.jpg')) res = ext.transform(img).to_df(timing=False, object_id=False) assert 'fruit' in res.columns assert 'apple' in res.columns assert res['apple'][0] > 0.7
def test_microsoft_api_face_emotion_extractor(): ext = MicrosoftAPIFaceEmotionExtractor() img = ImageStim(join(IMAGE_DIR, 'obama.jpg')) res = ext.transform(img).to_df(timing=False, object_id=False) assert res.shape == (1, 8) assert res['face_emotion_happiness'][0] > 0.5 assert res['face_emotion_anger'][0] < 0.5
def test_google_vision_face_batch(): stims = ['apple', 'obama', 'thai_people'] stim_files = [join(get_test_data_path(), 'image', '%s.jpg' % s) for s in stims] stims = [ImageStim(s) for s in stim_files] ext = GoogleVisionAPIFaceExtractor(batch_size=5) result = ext.transform(stims) result = merge_results(result, format='wide', extractor_names=False, handle_annotations='first') assert result.shape == (2, 139) assert 'joyLikelihood' in result.columns assert result['joyLikelihood'][0] == 'VERY_LIKELY' assert result['joyLikelihood'][1] == 'VERY_LIKELY' video = VideoStim(join(VIDEO_DIR, 'obama_speech.mp4')) conv = FrameSamplingFilter(every=10) video = conv.transform(video) result = ext.transform(video) result = merge_results(result, format='wide', extractor_names=False) assert 'joyLikelihood' in result.columns assert result.shape == (22, 139) video = VideoStim(join(VIDEO_DIR, 'small.mp4')) video = conv.transform(video) result = ext.transform(video) result = merge_results(result, format='wide', extractor_names=False) assert 'joyLikelihood' not in result.columns assert len(result) == 0
def test_google_vision_api_safe_search(): ext = GoogleVisionAPISafeSearchExtractor(num_retries=5) filename = join(get_test_data_path(), 'image', 'obama.jpg') stim = ImageStim(filename) result = ext.transform(stim).to_df() assert 'adult' in result.columns assert result['violence'][0] == 'VERY_UNLIKELY'