|
|
|
|
|
import fastbook |
|
fastbook.setup_book() |
|
from fastbook import * |
|
from fastai.vision.widgets import * |
|
key = os.environ.get('AZURE_SEARCH_KEY', 'XXX') |
|
search_images_bing |
|
search_images_ddg |
|
|
|
doc(search_images_ddg) |
|
def search_images(term): |
|
url ='https://duckduckgo.com/' |
|
res = urlread(url,data={'q':term}) |
|
searchObj=re.search(r'vqd=([\d-]+)\&',res) |
|
requestUrl = url + 'i.js' |
|
params = dict(l='us-en',o='json', q= term, vqd=searchObj.group(1), f=',,,', p='1', v7exp='a') |
|
urls,data = set(),{'next':1} |
|
while len(urls)<max_images and 'next' in data: |
|
data = urljson(requestUrl,data=params) |
|
urls.update(L(data['results']).itemgot('image')) |
|
requestUrl = url + data['next'] |
|
time.sleep(0.2) |
|
return L(urls)[:max_images] |
|
ims = ['http://3.bp.blogspot.com/-S1scRCkI3vY/UHzV2kucsPI/AAAAAAAAA-k/YQ5UzHEm9Ss/s1600/Grizzly%2BBear%2BWildlife.jpg'] |
|
dest = 'images/grizzly.jpg' |
|
download_url(ims[0], dest) |
|
im = Image.open(dest) |
|
im.to_thumb(128,128) |
|
bear_types = 'grizzly','black','teddy' |
|
path = Path('bears') |
|
|
|
doc(Path) |
|
if not path.exists(): |
|
path.mkdir() |
|
for o in bear_types: |
|
dest = (path/o) |
|
dest.mkdir(exist_ok=True) |
|
results = search_images_ddg(f'{o} bear', 150) |
|
print(results) |
|
download_images(dest, urls=results) |
|
fns = get_image_files(path) |
|
fns |
|
failed = verify_images(fns) |
|
failed |
|
|
|
failed = verify_images(fns) |
|
failed |
|
class DataLoaders(GetAttr): |
|
def __init__(self, *loaders): self.loaders = loaders |
|
def __getitem__(self, i): return self.loaders[i] |
|
train,valid = add_props(lambda i,self: self[i]) |
|
bears = DataBlock( |
|
blocks=(ImageBlock, CategoryBlock), |
|
get_items=get_image_files, |
|
splitter=RandomSplitter(valid_pct=0.2, seed=42), |
|
get_y=parent_label, |
|
item_tfms=Resize(128)) |
|
|
|
doc(DataBlock) |
|
|
|
dls = bears.dataloaders(path) |
|
dls.valid.show_batch(max_n=6, nrows=2) |
|
doc(bears.new) |
|
bears = bears.new(item_tfms=Resize(128, ResizeMethod.Squish)) |
|
dls = bears.dataloaders(path) |
|
dls.valid.show_batch(max_n=6, nrows=1) |
|
doc(bears.new) |
|
bears = bears.new(item_tfms=Resize(128, ResizeMethod.Pad, pad_mode='zeros')) |
|
dls = bears.dataloaders(path) |
|
dls.valid.show_batch(max_n=6, nrows=2) |
|
bears = bears.new(item_tfms=RandomResizedCrop(128, min_scale=0.3)) |
|
dls = bears.dataloaders(path) |
|
|
|
doc(dls.train.show_batch) |
|
|
|
|
|
dls.train.show_batch(max_n=3, nrows=1) |
|
dls.train.show_batch(max_n=3, nrows=1, unique=True) |
|
bears = bears.new(item_tfms=Resize(128), batch_tfms=aug_transforms(mult=2)) |
|
dls = bears.dataloaders(path) |
|
dls.train.show_batch(max_n=8, nrows=2, unique=True) |
|
bears = bears.new( |
|
item_tfms=RandomResizedCrop(128, min_scale=0.3), |
|
batch_tfms=aug_transforms()) |
|
|
|
|
|
dls = bears.dataloaders(path) |
|
|
|
|
|
learn = vision_learner(dls, resnet18, metrics=error_rate) |
|
learn.fine_tune(4) |
|
interp = ClassificationInterpretation.from_learner(learn) |
|
interp.plot_confusion_matrix() |
|
interp.plot_top_losses(3, nrows=2) |
|
|
|
doc(interp.plot_top_losses) |
|
|
|
|
|
|
|
interp.plot_top_losses(3, nrows=2, figsize=(10,10)) |
|
|
|
cleaner = ImageClassifierCleaner(learn) |
|
cleaner |
|
for idx in cleaner.delete(): cleaner.fns[idx].unlink() |
|
for idx,cat in cleaner.change(): shutil.move(str(cleaner.fns[idx]), path/cat) |
|
for idx in cleaner.delete(): cleaner.fns[idx].unlink() |